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加密密碼 然後實現登錄狀態的維持就實現了