django簡易的登錄 註冊 以及使用itsdangerous加密 session登錄狀態的維持

itsdangerous加密:

在開發過程中會遇到一些需要用戶激活使用的鏈接
這些需要帶有用戶的相關信息
又不希望這些信息以明文的方式展現給用戶
防止不放分子從中作惡
這時就可以使用itsdangerous來對數據進行加密
之後再對加密的數據進行解密得到用戶信息
從而對該用戶進行激活認證

views.py中實現登錄以及註冊功能

from django.shortcuts import render
from django.views import View
from django.http import HttpResponse
from itsdangerous import TimedJSONWebSignatureSerializer as SE
from itsdangerous import SignatureExpired  # 導入異常報錯模塊
from TY.settings import SECRET_KEY  #密鑰
import time
from .models import Users
# Create your views here.


#註冊
class RegisterResponse(View):
    def get(self,request):
        return render(request,"zuoye/register.html")

    def post(self,request):
        #1-從前端拿到數據
        username = request.POST.get("username")
        password = request.POST.get("password")
        #2-判斷數據 當數據太少時 直接判斷  不使用forms.py中的form類

        if not (username and password):
            return HttpResponse("用戶名以及密碼不能爲空")

        #3-對密碼加密
        Serializer = SE(SECRET_KEY, 60000) # 要加密的方式 ,加密的時間 加密對象

        info = {username:password}  # 要加密的內容
        ret = Serializer.dumps(info)  # 執行加密(加密內容)
        token = ret.decode()  #解密編碼方式
        #print(token)
        #time.sleep(3)
        """#解密
        try:
            result = Serializer.loads(token)  # 解密之前加密的變量
            print(result.get(username))  # 解密後顯示加密內容
        except SignatureExpired as e:
            print(e)  # 拋出激活日期已過期
        """
        #4-存入數據庫

        Users.objects.create(username=username,password=token)
        return HttpResponse("註冊成功!!")

#登錄
class LoginResponse(View):
    def get(self,request):
        return render(request,'zuoye/login.html')
    def post(self,request):
        #1-獲取前端用戶名以及密碼
        username = request.POST.get("username")
        password = request.POST.get("password")
        remember = request.POST.get("remember") #記住我
        #print(remember) #點擊時爲ON 不點擊時爲None
        # 2-跟數據庫中判斷
        #解密
        Serializer = SE(SECRET_KEY, 60000)
        user = Users.objects.filter(username=username).first()
        if user:
           user_password = user.password #數據庫裏的密碼
           try:
               result = Serializer.loads(user_password).get(username)  # 解密之前加密的變量
               #print(result)  # 解密後顯示加密內容
               #print("============")
               if result ==password:
                   # 3-用戶狀態
                   if remember:
                       username = request.POST.get("username")
                       request.session["username"] = username
                       request.session.set_expiry(7*24*3600)
                   else:
                       request.session.set_expiry(0)
                   return HttpResponse("登錄成功")
               else:

                   return HttpResponse("登錄有誤")
           except SignatureExpired as e:
               print(e)  # 拋出激活日期已過期


        else:
            return HttpResponse("用戶名錯誤")

urls.py文件中

from django.urls import path
from . import views
name_app = "zuoye"
urlpatterns = [
    path('register/',views.RegisterResponse.as_view(),name="register"),
    path('login/',views.LoginResponse.as_view(),name="login"),
]

templates中下的zuoye目錄下分別有login.html register.html

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登錄</title>
</head>
<body>
<form action="" method="post">
    {% csrf_token %}
    <input type="text" name="username" placeholder="請輸入用戶名"><br>
    <input type="password" name="password" placeholder="請輸入密碼"><br>
    <input type="checkbox" name="remember">記住我 <br>
    <input type="submit" value="提交登錄"><br>
</form>
</body>
</html>

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>註冊</title>
</head>
<body>
<form action="" method="post">
    {% csrf_token %}
    <input type="text" name="username" placeholder="請輸入用戶名"><br>
    <input type="password" name="password" placeholder="請輸入密碼"><br>
    <input type="submit" value="提交註冊"><br>

</form>
</body>
</html>

效果演示:

註冊:

在這裏插入圖片描述
在這裏插入圖片描述
在數據庫中查找數據
在這裏插入圖片描述
登錄:
一開始登錄狀態爲
在這裏插入圖片描述
登錄後:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

一個簡易的登錄 註冊 以及使用itsdangerous加密密碼 然後實現登錄狀態的維持就實現了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章