django添加token
django添加token

django添加token

1.概念

客户端:频繁请求呼叫

服务端:频繁的区数据库查询用户名和密码进行校验,增加服务器压力

当登陆成功后,我们希望在某段时间内,维持登陆状态,不需要重复的进行用户名和密码的校验,token应运而生

token:服务端生成的一串字符串,客户端请求的令牌

​ 客户端第一次登陆后,服务器生成一个token,以后客户端请求数据,只需携带token

2.安装

基于jwt标准的token

pip3 install pyjwt

3.组成

header.payload.signature

# header
# 1.alg加密算法,如果是未加密的token,设置成None;2.类型typ
headers = {'alg': 'HS256', 'typ': 'JWT'}
# payload
"""
iss: issuer jwt签发者
sub: sunbject jwt面向的用户
exp: expiration time jwt的过期时间,注意,必须大于签发时间
iat: issued at jwt的签发时间
"""
from datetime import datetime, timedelta
payload = {
    'iss': 'LoginView_post', 
    'sub': 'login', 
    'iat': int(datetime.now().timestamp()), 
    'exp': datetime.now()+timedelta(days=1), 
    'data': 'lee@qq.com'
          }

# signature
header.payload通过header里面声明的算法进行加盐(secret_key)组合加密
# 生成token
TOKEN_SECRET_KEY = 'feifei_FFmall' # 随机指定加盐密钥
encode_jwt = jwt.encode(payload, TOKEN_SECRET_KEY, algorithm='HS256', headers=headers)
# 拆解token
jwt.decode(encode_jwt, TOKEN_SECRET_KEY, algorithms=['HS256'])

4.应用

import jwt
from datetime import datetime, timedelta
class LoginView(View):
    @method_decorator(verifyParam('email', 'password', 'verify'))
    def post(self, request, uuid):
        post = request.POST
        email = post.get('email')
        password = post.get('password')
        verify = post.get('verify')
        ...
        payload = {
                    'iss': 'LoginView_post',
                    'sub': 'login',
                    'iat': int(datetime.now().timestamp()),
                    'exp': datetime.now()+timedelta(days=1),
                    'data': email,
                }
                # 编码token
                encode_jwt = jwt.encode(payload, token_conf.TOKEN_SECRET_KEY, algorithm='HS256', headers=token_conf.headers)
                # 校验通过后,返回成功
        return ResFormat(data=encode_jwt).json_response()

发表回复

您的电子邮箱地址不会被公开。