1. 程式人生 > 其它 >8Django-前後端分離專案實現會話保持的原理

8Django-前後端分離專案實現會話保持的原理

前後端分離專案實現會話保持的原理

1後端生成令牌並將令牌響應給前端

2前端從響應結果中拿到令牌,然後把令牌和需要變動的資料一起傳送給後端

3後端接收到請求後對令牌進行解密,如果正確就執行儲存,否則就駁回

示例講解:

一後端:

1後端生成令牌並將令牌響應給前端

1在setting裡為jwt配置一個金鑰key

JWT_TOKEN_KEY = '123456'

2在dtoken應用裡的檢視views中引入配置setting:

from django.conf import settings

3編寫一個生成令牌的方法:

#編寫一個生成令牌的獨立方法
import time
import
jwt from django.conf import settings def make_token(username, expire=3600*24): key = settings.JWT_TOKEN_KEY now_t = time.time() payload_data = {'username':username, 'exp':now_t+expire} return jwt.encode(payload_data,key,algorithm='HS256')

4呼叫方法生成令牌並響應給前端


#使用者登入請求介面繫結的檢視函式
def
tokens(request):
if request.method != 'POST': result = {'code':201, 'error':'請求方式並非post'} return JsonResponse(result) #獲取請求體 json_str = request.body #將請求體轉換為python串 json_obj = json.loads(json_str) #取資料 username = json_obj.get('username') password = json_obj.get('password')
#驗證使用者名稱和密碼 try: user = UserProfile.objects.get(username=username) except Exception as e: print('使用者名稱驗證失敗%s'%(e)) result = {'code':208,'error':'使用者名稱不存在'} return JsonResponse(result) #給明文密碼加密 hash_object = hashlib.md5() hash_object.update(password.encode()) pwd = hash_object.hexdigest() #比對密碼 if pwd != user.password: result = {'code':209,'error':'提交的使用者名稱或密碼不正確'} return JsonResponse(result) #記錄會話保持狀態 token = make_token(username) #print(type(token)) result = {'code':200, 'username':username, 'data':{'token':token}} return JsonResponse(result)