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)

 

 

 

posted @ 2021-12-13 13:29  linuxTang  阅读(191)  评论(0)    收藏  举报