• 0基础django_家政类网站开发_day3_用户管理


    继day2以后创建一个userInfomation.html。

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 
      4 <head>
      5     <meta charset="UTF-8">
      6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
      7     <title>Document</title>
      8 </head>
      9 
     10 <body>
     11 
     12 
     13     <form action="/user_management/userInfomation.html/" method="POST">
     14         <p>
     15         <input type="hidden" name="userId" value="{{listInfo.userid}}">
     16             
     17         </p>
     18 
     19         <p>
     20             用户名:
     21             <input type="text" name="userName" value="{{listInfo.username}}">
     22         </p>
     23 
     24         <p>
     25             身份证:
     26             <input type="text" name="userIdCard" value="{{listInfo.useridcard}}">
     27         </p>
     28 
     29         <p>
     30             年龄:
     31             <input type="text" name="userAge" value="{{listInfo.userage}}">
     32         </p>
     33 
     34         <p>
     35             性别:
     36             <input type="text" name="userSex" value="{{listInfo.usersex}}">
     37 
     38         </p>
     39 
     40         <p>
     41             电话:
     42             ||<input type="text" name="userTel" value="{{listInfo.usertel}}">
     43 
     44         </p>
     45 
     46         <p>
     47             状态:
     48             ||<input type="text" name="userStatus" value="{{listInfo.userstatus}}">
     49 
     50         </p>
     51 
     52         <p>
     53             信誉度:
     54             ||<input type="text" name="userEvaluate" value="{{listInfo.userevaluate}}">
     55 
     56         </p>
     57 
     58         <p>
     59             账户:
     60             ||<input type="text" name="userAccount" value="{{listInfo.useraccount}}">
     61 
     62         </p>
     63 
     64         <p>
     65             住址:
     66             <input type="text" name="userAddress" value="{{listInfo.useraddress}}">
     67 
     68         </p>
     69 
     70         <p>
     71             头像:
     72             <img src="{{listInfo.userpic}}">
     73             ||<input type="text" name="userPic" value="{{listInfo.username}}">
     74 
     75         </p>
     76 
     77         <p>
     78             注册时间:
     79             ||<input type="datetime" name="userRegdate" value="{{listInfo.userregdate}}">
     80 
     81         </p>
     82 
     83         <p>
     84             用户身份:
     85             ||<input type="text" name="userIdentity" value="{{listInfo.useridentity}}">
     86 
     87         </p>
     88 
     89         <p>
     90             国籍:
     91             <input type="text" name="userNative" value="{{listInfo.usernative}}">
     92 
     93         </p>
     94 
     95         <p>
     96             教育背景:
     97             <input type="text" name="userEduBack" value="{{listInfo.usereduback}}">
     98 
     99         </p>
    100 
    101         <p>
    102             用户等级:
    103             ||<input type="text" name="userScale" value="{{listInfo.userscale}}">
    104         </p>
    105 
    106         <p>
    107             <input type="submit" value="修改">
    108         </p>
    109     </form>
    110 
    111 
    112 
    113 </body>
    114 
    115 </html>
    userInfomation.html

    编写逻辑:

    当我用户注册了账号以后随即跳转进入userInfomation.html修改个人信息

    所以register里面处理逻辑代码是

     1 class register(View):  # 继承View类作为父类
     2     # 注册账户
     3 
     4     # 重写父类方法,该方法可作为装饰器功能
     5     # def dispatch(self, request, *args, **kwargs):  # 自定制 dispatch方法,除了可以利用父类中原dispatch方法,还可以自定制处理逻辑
     6     #     obj = super(register,self).dispatch(request, *args, **kwargs) # 传入register对象作为参数,调用父类中的方法
     7     #     return obj
     8 
     9     def get(self, request):  # 请求为get请求时,自动调用该方法
    10         return render(request, 'register.html')
    11 
    12     def post(self, request):   # 请求是POST请求时,自动调用该方法
    13         userTel = request.POST.get('userTel')
    14         userPsw = request.POST.get('userPsw')
    15         if isRegister(userTel) == False:
    16             Usersec.objects.create(
    17                 usertel=userTel,  # 表中字段生成到models.py自动变为小写
    18                 userpsw=userPsw,
    19             )
    20             '''
    21             查询userTel对应的Id
    22             '''
    23             obj = Usersec.objects.filter(usertel=userTel)
    24             userId = obj[0].userid
    25             '''
    26             通过这个userId忘userInfo里面写默认数据
    27             '''
    28             Userinfo.objects.create(
    29                 userid=userId,
    30                 username='尊敬的友爱家政用户',
    31                 useridcard='',
    32                 userage='',
    33                 usersex=3,
    34                 usertel=userTel,
    35                 userstatus=0,
    36                 userevaluate=0,
    37                 useraccount=0,
    38                 useraddress='',
    39                 userpic='/static/header.png',
    40                 userregdate=getTime(),
    41                 useridentity=0,
    42                 usernative='',
    43                 usereduback='',
    44                 userscale=0,
    45             )
    46             listInfo = Userinfo.objects.filter(userid=userId)
    47             return render(request, 'userInfomation.html', {'listInfo': listInfo[0]})
    48         else:
    49             return HttpResponse('flase')
    register

     跳转到userInfomation的时候,因为要更新用户传入的信息的新值,则需要用到update()

     1 class userInfomation(View):  # 继承View类作为父类
     2     # 修改个人信息
     3     def get(self, request):  # 请求为get请求时,自动调用该方法
     4         return HttpResponse('getInfo')
     5 
     6     def post(self, request):   # 请求是POST请求时,自动调用该方法
     7         # 更新信息
     8         userId = request.POST.get('userId')
     9         username = request.POST.get('userName')
    10         useridcard = request.POST.get('userIdCard')
    11         userage = request.POST.get('userAge')
    12         usersex = request.POST.get('userSex')
    13         useraddress = request.POST.get('userAddress')
    14         usernative = request.POST.get('userNative')
    15         usereduback = request.POST.get('userEduBack')
    16         obj = Userinfo.objects.filter(userid=userId)
    17         obj.update(**{
    18             'username':username,
    19             'useridcard':useridcard,
    20             'userage':userage,
    21             'usersex':usersex,
    22             'useraddress':useraddress,
    23             'usernative':usernative,
    24             'usereduback':usereduback,
    25         }
    26         )
    27         return render(request, 'register.html')
    userInfomation

    至此用户的注册功能完成....

    接下来要完成用户登录的功能,首先写一个login.html

    在此之前先在setting里面设置一下template的路径

    和static静态文件的路径

     这样做是让项目层次更分明:

    login.html就是登录功能随便写:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=<<<device-width>>>, initial-scale=1.0">
     7     <title>Document</title>
     8 </head>
     9 
    10 <body>
    11     <form action="/user_management/login.html/" method="POST">
    12         <p>用户电话<input type="text" name="userTel"></p>
    13         <p>用户电话<input type="text" name="userPsw"></p>
    14         <p><input type="submit" value="登录"></p>
    15     </form>
    16 </body>
    17 
    18 </html>
    login.html

    然后login.html的处理逻辑是,读取html的input里面的登录电话和密码,然后和数据库里面比较,若存在的话则算登录成功,登录成功需要写入cookie进行状态保留。

    这里值得注意的是,在注册的时候应该把密码加密写入数据库。所以我们写一个自定义md5加密方式加密密码:

    1 import hashlib
    2 
    3 def custom_md5_encryption(value, salt='dsfka676f9a78#$%^'):
    4     #自定义MD5加盐_加密方法
    5     value = str(value)
    6     val = value + salt
    7     newval = str(val).encode()
    8     m = hashlib.md5(newval)
    9     return m.hexdigest()
    View Code

    修改一下register里面的业务逻辑:

     1 class register(View):  # 继承View类作为父类
     2     # 注册账户
     3 
     4     # 重写父类方法,该方法可作为装饰器功能
     5     # def dispatch(self, request, *args, **kwargs):  # 自定制 dispatch方法,除了可以利用父类中原dispatch方法,还可以自定制处理逻辑
     6     #     obj = super(register,self).dispatch(request, *args, **kwargs) # 传入register对象作为参数,调用父类中的方法
     7     #     return obj
     8 
     9     def get(self, request):  # 请求为get请求时,自动调用该方法
    10         return render(request, 'register.html')
    11 
    12     def post(self, request):   # 请求是POST请求时,自动调用该方法
    13         userTel = request.POST.get('userTel')
    14         psw = request.POST.get('userPsw')
    15         #加密密码
    16         userPsw = custom_md5_encryption(psw)
    17         if isRegister(userTel) == False:
    18             Usersec.objects.create(
    19                 usertel=userTel,  # 表中字段生成到models.py自动变为小写
    20                 userpsw=userPsw,
    21             )
    22             '''
    23             查询userTel对应的Id
    24             '''
    25             obj = Usersec.objects.filter(usertel=userTel)
    26             userId = obj[0].userid
    27             '''
    28             通过这个userId忘userInfo里面写默认数据
    29             '''
    30             Userinfo.objects.create(
    31                 userid=userId,
    32                 username='尊敬的友爱家政用户',
    33                 useridcard='',
    34                 userage='',
    35                 usersex=3,
    36                 usertel=userTel,
    37                 userstatus=0,
    38                 userevaluate=0,
    39                 useraccount=0,
    40                 useraddress='',
    41                 userpic='/static/img/header.png',
    42                 userregdate=getTime(),
    43                 useridentity=0,
    44                 usernative='',
    45                 usereduback='',
    46                 userscale=0,
    47             )
    48             listInfo = Userinfo.objects.filter(userid=userId)
    49             return render(request, 'userInfomation.html', {'listInfo': listInfo[0]})
    50         else:
    51             return HttpResponse('flase')
    register_new

    然后再更新login的业务逻辑:

     1  def get(self, request):
     2         return render(request, 'login.html')
     3     def post(self, request):
     4         userTel = request.POST.get('userTel')
     5         psw = request.POST.get('userPsw')
     6         userPsw = custom_md5_encryption(psw)
     7         objs = Usersec.objects.filter(usertel=userTel).first()
     8         print(objs)
     9         if objs == None:
    10             return HttpResponse('没有此用户')
    11         elif objs.userpsw != userPsw:
    12             return HttpResponse('密码错误')
    13         else:
    14             #写入cookie
    15             obj = render(request, 'cookietest.html')#redirect render httpresponse都ok的
    16             #写cookie
    17             obj.set_signed_cookie(user_ID, objs.userid, salt=my_salt, max_age = 1800, httponly=False)#httponly=Flase 只能通过http请求传入,js代码无法获取到
    18             #读取cookie
    19             #request.get_signed_cookie(user_ID, salt=my_salt)
    20             return obj
    login.py

    这样的话登录注册功能就完成了。

     ------------------------------------------

    made django有自带的登录退出的状态维持方法,userId字段可以存入session

    ------------------------------------------

    写一个只有登录才能进入的测试页面

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6     <title>Document</title>
     7 </head>
     8 <body>
     9     <h1>
    10         success
    11     </h1>
    12 </body>
    13 </html>
    cookietest

    cookietest里面的业务逻辑:

     1 class cookietest(View):
     2     def get(self, request):     
     3         if user_ID in request.COOKIES: #很重要,要是没有这一句。cookie又不存在的话会报错。  
     4             is_login = request.get_signed_cookie(user_ID, salt=my_salt) 
     5             if is_login:
     6                 return render(request, 'cookietest.html')
     7         else:
     8             return HttpResponse('flase')
     9     def post(self, request):
    10         return HttpResponse('success_post')
    cookietest.py
  • 相关阅读:
    Eclipse中properties文件中文显示编码、乱码问题
    Eclipse中安装yml插件( YEdit )
    Java中如何返回Json数组
    ASIFormDataRequest 登录
    Safari里使用JsonView
    beginUpdates和endUpdates
    svn log 不显示日志的问题
    svn代码回滚命令
    Tomcat: localhost:8080 提示404
    android定时三种方式
  • 原文地址:https://www.cnblogs.com/Oliva/p/12529527.html
Copyright © 2020-2023  润新知