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

具体实现

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
      
    • 注册功能调试

相关推荐
云和数据.ChenGuang几秒前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys29 分钟前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi29 分钟前
SQL注入的那些面试题总结
数据库·sql
建投数据1 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi2 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀2 小时前
Redis梳理
数据库·redis·缓存
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
梧桐树04293 小时前
python常用内建模块:collections
python
Dream_Snowar3 小时前
速通Python 第三节
开发语言·python
你的微笑,乱了夏天3 小时前
linux centos 7 安装 mongodb7
数据库·mongodb