项目实战-图书管理系统之个人中心

具体实现

1> 引入 《登录注册》 的模版文件
  • 将提供的素材文件夹 "登录注册 " 中的 CSS、img、JS 文件夹复制到项目根目录的static_files文件夹;将html文件复制到项目根目录的模板文件夹templates

  • 修改引入路径并测试

    • login.html

      复制代码
      {#  在head标签中引入css文件  #}
      <link rel="stylesheet" href="/static/css/reset.css"/>
      <link rel="stylesheet" href="/static/css/login_register.css"/>
      ​
      {#  修改跳转链接  #}
      <div class="form_reg_btn">
          <span>还没有帐号?</span><a href="/register">马上注册</a>
      </div>
      ​
      {# 在body 中引入js文件 #}
      <script type="text/javascript" src="/static/js/jquery.min.js"></script>
      <script type="text/javascript" src="/static/js/login_register.js"></script>
      register.html
      
      
      
      
      
      {#  标签中引入css文件  #}
      <link rel="stylesheet" href="/static/ss/reset.css"/>
      <link rel="stylesheet" href="/static/css/login_register.css"/>
      ​
      {#  修改跳转链接  #}
      <div class="form_reg_btn">
          <span>已有帐号?</span><a href="/login">马上登录</a>
      </div>
      ​
      {# 在body 中引入js文件 #}
      <script type="text/javascript" src="/static/js/jquery.min.js"></script>
      <script type="text/javascript" src="/static/js/login_register.js"></script>
      ​
      static_files/CSS/login_register.css 修改图片路径
      
      
      
      
      
      .login_wrap{
          background: url("/static/img/bg2.jpg") no-repeat center;
          background-size: 100%;
      }
      ​
      .logo{
          width: 500px;
          height: 150px;
          margin: 0px auto;
          background: url("/static/img/logo.png") no-repeat center;
      }
    • 编辑 users 应用的路由和视图测试模板渲染情况

      • users 应用路由

        复制代码
        urlpatterns = [
            # 用户登录
            re_path(r'^login$', views.login),
            # 用户注册
            re_path(r'^register$', views.register)
        ]
        users 应用视图函数
        
        
        
        
        
        from django.shortcuts import render
        from django.http import HttpResponse
        ​
        ​
        # 登录的视图函数
        def login(request):
            return render(request, "login.html")
        ​
        ​
        # 注册的视图函数
        def register(request):
            return render(request, "register.html")
      • API 测试

        复制代码
        登录API: http://127.0.0.1:8080/login
        复制代码
        注册API: http://127.0.0.1:8080/register
        复制代码
        登陆与注册的跳转
2> 编辑路由、视图函数与模板文件完成具体业务逻辑
  • 登录实现

    • 编辑 login.html 模版文件, 修改数据提交方式

      复制代码
      <form action="#" method="post">
      {#  给表单添加一个隐藏的标签用来 保存csrf_token   #}
      {% csrf_token %}
      ...
      <div class="form_btn">
          {#  给登录按钮添加 id属性; 并在JS中为按钮添加点击事件的处理逻辑  #}
          <button id="login" type="button">登录</button>
      </div>
      </form>
      ​
      <script type="text/javascript" src="/static/js/jquery.min.js"></script>
      <script type="text/javascript" src="/static/js/login_register.js"></script>
      <script>
          // 添加登录按钮的点击事件
          $("#login").click(function(event){
              // 取消默认事件
              event.preventDefault();
              $.ajax({
                  url:'/login',
                  type: 'post',
                  data: {
                      // 携带csrftoken
                      csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val(),
                      username: $("input[name='username']").val(),
                      password: $("input[name='password']").val()
                  },
                  success: function(response){
                      if(response.status === 200){
                          alert(response.msg);
                          // 登录成功之后跳转到指定页面
                          location.href = "#";
                      }else{
                          alert(response.msg);
                          // 将表单数据复位
                          $("form")[0].reset();
                      }
                  },
                  error:function(error){
                      console.log(error.responseText);
                  }
              })
          })
      </script>
      编辑 users 应用的 views.py 视图文件
      
      
      
      
      
      from django.shortcuts import render
      from django.http import HttpResponse, HttpResponseNotAllowed, JsonResponse
      from .models import User
      ​
      # 登录的视图函数
      def login(request):
          if request.method == "GET":
              return render(request, "login.html")
          elif request.method == "POST":
              # 读取数据
              data = request.POST
              username = data.get("username")
              password = data.get("password")
              # 数据校验,不要相信前端
              if len(username) > 20 or len(username) < 6:
                  return JsonResponse({"status": 400, "msg": "请输入长度为6-20的用户名!"})
      ​
              if not User.objects.filter(username__exact=username, password__exact=password):
                  return JsonResponse({"status": 400, "msg": "账号或密码错误!"})
      ​
              return JsonResponse({"status": 200, "msg": "登录成功!"})
          else:
              return HttpResponseNotAllowed
    • 手动在 tb_user数据表 中添加一个用户进行登录功能调试

  • 注册实现

    • 编辑 register.html 模版文件, 修改数据提交方式

      复制代码
      <div class="login_form">
      {% csrf_token %}
      ...
      <div class="form_btn">
          <button id="register" type="button">注册</button>
      </div>
      </form>
      ​
      <script type="text/javascript" src="/static/js/jquery.min.js"></script>
      <script type="text/javascript" src="/static/js/login_register.js"></script>
      <script>
          $("#register").click(function (event) {
              // 取消默认事件
              event.preventDefault();
              if ($("input[name='password']").val() === $("input[name='repassword']").val()) {
                  $.ajax({
                      url: '/register',
                      type: 'post',
                      data: {
                          // 携带csrftoken
                          csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val(),
                          username: $("input[name='username']").val(),
                          password: $("input[name='password']").val(),
                          code: $("input[name='code']").val()
                      },
                      success: function (response) {
                          if (response.status === 200) {
                              alert(response.msg);
                              // 注册成功之后跳转到登录页面
                              location.href = "/login";
                          } else {
                              alert(response.msg);
                              // 将表单数据复位
                              $("form")[0].reset();
                          }
                      },
                      error: function (error) {
                          console.log(error.responseText);
                      }
                  })
              }else{
                  alert("两次输入密码不一致!")
            }
      ​
        })
      </script>
    • 编辑 users 应用的 views.py 视图文件

      复制代码
      # 注册的视图函数
      def register(request):
          if request.method == "GET":
              return render(request, "register.html")
          elif request.method == "POST":
              # 读取数据
              data = request.POST
              username = data.get("username")
              password = data.get("password")
              code = data.get("code")
              # 数据校验
              if len(username) > 20 or len(username) < 6 or len(password) > 20 or len(password) < 6:
                  return JsonResponse({"status": 400, "msg": "用户名和密码应该为6-20位长度!"})
              if User.objects.filter(username__exact=username):
                  return JsonResponse({"status": 400, "msg": "用户已存在!"})
              if code != "888888":
                  return JsonResponse({"status": 400, "msg": "验证码错误!"})
              User.objects.create(
                  username=username,
                  password=password,
            )
              return JsonResponse({"status": 200, "msg": "用户注册成功!"})
          else:
              return HttpResponseNotAllowed
    • 注册功能调试

相关推荐
SelectDB技术团队5 分钟前
快手基于 Apache Doris 千亿多模态检索的实践
数据库·数据分析·全文检索·快手·apache doris·向量索引·多模态检索
fanxiaohui121386 分钟前
2026年长效耐用磁吸充电宝推荐|南孚传应解锁安心出游
服务器·人工智能·手机·电池·南孚传应
政企项目老覃11 分钟前
金融转账“幽灵失败“排查实录:从本地消息表到 Seata TCC 的选型与权衡
数据库·程序人生·性能优化·数据分析·系统架构
TLA技术12 分钟前
LogMiner vs 裸日志解析(三):Oracle日志解析中的“前镜像”和“后镜像”,到底怎么用?
数据库·oracle·flink·dba·迁移学习
IT邦德19 分钟前
BIC-QA如何重新定义数据库知识服务
运维·数据库
长沙三为智能科技20 分钟前
中小企业数据驱动决策:从老板拍脑袋到数据说话的4步实操
python
逐米时代32 分钟前
BOM智能构建:全链路一致性自动校验
大数据·数据库·人工智能
计算机源码社33 分钟前
基于大数据技术的台北市住宅价格影响因素挖掘与可视化分析-基于Python与Hadoop的台北市住宅价格数据仓库构建与可视化
大数据·hadoop·python·数据分析·spark·毕业设计·数据可视化
唐璜Taro36 分钟前
Agent Harness 系列 · 第 2篇|同一个问题三种回答
人工智能·python
SelectDB技术团队1 小时前
StarRocks 迁移至 Apache Doris 完整指南:三步完成结构、数据与业务平滑切换
数据库·人工智能·sql·clickhouse·apache doris·selectdb·湖仓架构升级