前端(HTML)+预设(Django)+数据库(MySQL):用户注册及登录演示改良版

记得在app01下的models中搞定模型类
建立迁移文件:python manage.py makemigrations
根据迁移文件在指定数据库中生成表:python manage.py migrate
create database book character set utf8;创建数据库设置字符集编码

在settings里面设置mysql
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'books',     #你的数据库名称
        'USER': 'root',    #你的数据库用户名
        'PASSWORD': '',  #你的数据库密码
        'HOST': '',  #你的数据库主机,留空默认为localhost
        'PORT': '3306',  #你的数据库端口
    }

init连接mysql

import pymysql
pymysql.install_as_MySQLdb()

1.在templates中创建一个html文件用于简单的注册网页

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>注册</title>
  6        <style>
  7         * {
  8             margin: 0;
  9             padding: 0;
 10         }
 11 
 12         body {
 13             background-color: rgb(235, 235, 235);
 14         }
 15 
 16         form {
 17             width: 400px;
 18             height: 320px;
 19             background-color: white;
 20             padding: 20px;
 21             box-sizing: border-box;
 22             position: absolute;
 23             left: 50%;
 24             top: 50%;
 25             transform: translate(-50%, -50%);
 26             /* 相对于现在所处位置的位移变化,x便偏移自己宽度的50%,y偏移自己高度的50% */
 27         }
 28 
 29         h2 {
 30             margin-bottom: 20px;
 31             text-align: center;
 32         }
 33 
 34         form input {
 35             width: 100%;
 36             height: 30px;
 37             display: block;
 38             margin-bottom: 20px;
 39             padding-left: 10px;
 40             box-sizing: border-box;
 41         }
 42 
 43         .mya {
 44             width: 100%;
 45             height: 30px;
 46             margin-bottom: 20px;
 47         }
 48 
 49         .mya a:nth-child(1) {
 50             float: left;
 51         }
 52 
 53         .mya a:nth-child(2) {
 54             float: right;
 55         }
 56 
 57         button {
 58             width: 100%;
 59             height: 40px;
 60             background-color: rgb(235, 235, 235);
 61             border: none;
 62         }
 63 
 64         button:active {
 65             box-shadow: 0 0 3px rgb(173, 172, 172);
 66             /* x偏移  y偏移  模糊值 颜色 */
 67         }
 68     </style>
 69 </head>
 70 <body>
 71     <form  method="post">
 72         <h2>注册界面</h2>
 73         <input id="username" type="text" placeholder="请输入账号" name="usernamekey">
 74         <input id="password" type="password" placeholder="请输入密码" name="passwordkey">
 75         <div class="mya">
 76             <a href="http://127.0.0.1:8000/sign">已有帐号</a>
 77         </div>
 78         <button id="login-btn" type="submit">登录</button>
 79     </form>
 80 
 81     <script>
 82         // let 定义一个变量
 83         let username = document.getElementById('username')
 84         let password = document.getElementById('password')
 85         let loginBtn = document.getElementById('login-btn')
 86             // js里面不允许出现 -
 87 
 88         //一般的交互事件
 89         // onclick 点击事件
 90         // onmousemove  鼠标移入事件
 91         // onmouseout  鼠标移出事件
 92         // ondblclick  双击事件
 93         // onfocus  input框获取焦点事件
 94         // onblur  失焦事件
 95 
 96 
 97         loginBtn.onclick = function() {
 98             let usernamevalue = username.value
 99             let passwordvalue = password.value
100                 // console.log(usernamevalue, passwordvalue)
101                 // 便于检查的时候判断是否成功
102             if (!usernamevalue) {
103                 return alert('请输入正确的用户名')
104                     //return 跳出当前函数,并且返回后面的值
105             }
106             console.log(usernamevalue, passwordvalue)
107 
108         }
109     </script>
110 </body>
111 </html>

2.在templates中创建再一个html文件用于简单的登录网页

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>登录</title>
  6        <style>
  7         * {
  8             margin: 0;
  9             padding: 0;
 10         }
 11 
 12         body {
 13             background-color: rgb(235, 235, 235);
 14         }
 15 
 16         form {
 17             width: 400px;
 18             height: 320px;
 19             background-color: white;
 20             padding: 20px;
 21             box-sizing: border-box;
 22             position: absolute;
 23             left: 50%;
 24             top: 50%;
 25             transform: translate(-50%, -50%);
 26             /* 相对于现在所处位置的位移变化,x便偏移自己宽度的50%,y偏移自己高度的50% */
 27         }
 28 
 29         h2 {
 30             margin-bottom: 20px;
 31             text-align: center;
 32         }
 33 
 34         form input {
 35             width: 100%;
 36             height: 30px;
 37             display: block;
 38             margin-bottom: 20px;
 39             padding-left: 10px;
 40             box-sizing: border-box;
 41         }
 42 
 43         .mya {
 44             width: 100%;
 45             height: 30px;
 46             margin-bottom: 20px;
 47         }
 48 
 49         .mya a:nth-child(1) {
 50             float: left;
 51         }
 52 
 53         .mya a:nth-child(2) {
 54             float: right;
 55         }
 56 
 57         button {
 58             width: 100%;
 59             height: 40px;
 60             background-color: rgb(235, 235, 235);
 61             border: none;
 62         }
 63 
 64         button:active {
 65             box-shadow: 0 0 3px rgb(173, 172, 172);
 66             /* x偏移  y偏移  模糊值 颜色 */
 67         }
 68     </style>
 69 </head>
 70 <body>
 71     <form  method="post">
 72         <h2>登录界面</h2>
 73         <input id="username" type="text" placeholder="请输入账号" name="usernamekey">
 74         <input id="password" type="password" placeholder="请输入密码" name="passwordkey">
 75         <div class="mya">
 76             <a href="">忘记密码(正在开发中)</a>
 77             <a href="http://127.0.0.1:8000/register">注册</a>
 78         </div>
 79         <button id="login-btn" type="submit">登录</button>
 80     </form>
 81 
 82     <script>
 83         // let 定义一个变量
 84         let username = document.getElementById('username')
 85         let password = document.getElementById('password')
 86         let loginBtn = document.getElementById('login-btn')
 87             // js里面不允许出现 -
 88 
 89         //一般的交互事件
 90         // onclick 点击事件
 91         // onmousemove  鼠标移入事件
 92         // onmouseout  鼠标移出事件
 93         // ondblclick  双击事件
 94         // onfocus  input框获取焦点事件
 95         // onblur  失焦事件
 96 
 97 
 98         loginBtn.onclick = function() {
 99             let usernamevalue = username.value
100             let passwordvalue = password.value
101                 // console.log(usernamevalue, passwordvalue)
102                 // 便于检查的时候判断是否成功
103             if (!usernamevalue) {
104                 return alert('请输入正确的用户名')
105                     //return 跳出当前函数,并且返回后面的值
106             }
107             console.log(usernamevalue, passwordvalue)
108 
109         }
110     </script>
111 </body>
112 </html>

3.在templates中创建一个html文件用于登陆后的网页

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     <h1>{{ uname }}你好,恭喜你开启了新世纪!!!</h1>
 9 </body>
10 </html>

4.在app01下的views.py中引入

from django.shortcuts import render, HttpResponse, redirect
from app01.models import User
 1 def register(request):
  """
        用户注册
    本视图需要对get和post请求做分别的处理
    post请求
        1. 从POST请求中获取数据(username,pwd)
        2. 对数据进行判空
        3. 判断数据库有没有重复的用户名
        4. 写入数据库
        5. 写入cookie
        6. 跳转个人中心
    get请求
        返回注册页面
    :param request: 
    :return: 
    """ 9 if request.method == "POST": 10 uname = request.POST.get('usernamekey') 11 pwd = request.POST.get('passwordkey') 12 print(uname, pwd) 13 if not all([uname, pwd]): 14 return HttpResponse("缺少用户名或密码") 15 User.objects.create(username=uname, password=pwd) 16 res = redirect("/page") 17 request.session["username"] = uname 18 return res 19 return render(request, "register.html") 20 21 22 def sign(request): 23 """ 24 登录 25 1.获取网页数据(用户名,密码) 26 2.进行用户名和密码的校验 27 :param request: 28 :return: 29 """ 30 if request.method == "POST": 31 uname = request.POST.get('usernamekey') # 获取网页 32 pwd = request.POST.get('passwordkey') 33 if User.objects.filter(username=uname, password=pwd): 34 return redirect("/page") 35 else: 36 return HttpResponse("登录失败账号或密码错误") 37 return render(request, "sign.html") 38 39 40 def page(request): 41 """ 42 页面 43 1.获取session进行判断 44 2.存在正常进入,不存在返回注册界面 45 :param request: 46 :return: 47 """ 48 uname = request.session.get("username") 49 print(uname) 50 if not uname: 51 return redirect("/register") 52 return render(request, "page.html", {"uname": uname})

改良版的注册

 1 def register(request):
 2     """
 3            用户注册
 4        本视图需要对get和post请求做分别的处理
 5        post请求
 6            1. 从POST请求中获取数据(username,pwd)
 7            2. 对数据进行判空
 8            3. 判断数据库有没有重复的用户名
 9            4. 写入数据库
10            5. 写入cookie
11            6. 跳转个人中心
12        get请求
13            返回注册页面
14        :param request: 
15        :return: 
16        """
17     if request.method == "POST":
18         uname = request.POST.get('usernamekey')  # 获取post数据
19         pwd = request.POST.get('passwordkey')
20         print(uname, pwd)
21         if not all([uname, pwd]):  # 判空
22             return HttpResponse("缺少用户名或密码")
23         # User.objects.create(username=uname, password=pwd)  # 创建
24         # res = redirect("/page")
25         # request.session["username"] = uname
26         # return res
27         try:
28             users = User.objects.filter(username=uname)
29         except Exception as e:
30             return HttpResponse("数据库查询失败")
31         if users:
32             return HttpResponse("用户名重复")
33         try:
34             User.objects.create(username=uname, password=pwd)
35         except Exception as e:
36             return HttpResponse("数据库写入失败")
37         res = redirect("/page")
38         res.set_cookie("name", uname)
39         request.session["username"] = uname
40         return res
41     return render(request, "register.html")

 

 

 改良版的登录

 1 def get_user(request):
 2     if request.method == "POST":  # 先验证用户名是否存在再判断密码是否存在
 3         usernamess = request.POST.get('usernamekey')  # 获取post数据
 4         passwordss = request.POST.get('passwordkey')
 5         if not all([usernamess, passwordss]):  # 判空
 6             return HttpResponse("缺少用户名或密码")
 7     # 密码
 8         try:
 9             users = User.objects.filter(username=usernamess)
10         except Exception as e:
11             return HttpResponse("数据库连接失败")
12     # 查看 User 表有没有 username
13         if users.count():
14             # .count 也可以写为 .exists,直接判断是否存在
15             #     有就是 1  , 没有就是 0
16             # user 用户存在
17             user = users.first()
18             #     取数据  last() 也可以
19             print(type(user.password))
20             print(type(passwordss))
21             if passwordss == user.password:
22                 res = redirect("/page")
23                 res.set_cookie("name", usernamess)
24                 request.session["username"] = usernamess
25                 return res
26             else:
27                 print("密码错误")
28         else:
29             print("用户名不存在")
30         # return HttpResponse("获取成功")
31             uname = request.session.get("username", None)
32             uuname = request.COOKIES.get("name", None)
33             print(uname)
34             if uname:
35                 return redirect("/page")
36             elif uuname:
37                 return redirect("/page")
38     return render(request, "get_user.html")

 

posted @ 2021-03-18 15:45  outsider078  阅读(521)  评论(0)    收藏  举报