drf补充篇-关于payload的自定义内容
发布时间:2022-06-30
浏览量: 1397
文章分类: python
drf补充篇-关于payload的自定义内容
日常我们使用前后端分离的时候,不可能说我们的payload完全是符合前端的需求的,比如他们希望可以增加用户的头像、组别等信息,这些信息你可以通过明文,当然也可以通过放在payload中一起传输。强烈建议你先看看我之前的关于drf的一些介绍。
关于引入rest_framework相关那些我就不在赘述了。
settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
# 'rest_framework.authentication.BasicAuthentication',
# 'rest_framework.authentication.SessionAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
# 关闭文档提示
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_RESPONSE_PAYLOAD_HANDLER': 'utils.jwt_payload.jwt_response_payload_handler',
'JWT_PAYLOAD_HANDLER': 'utils.jwt_payload.jwt_payload_handler', # 自定义payload内容
# 是否开启允许Token刷新服务,及限制Token刷新间隔时间,从原始Token获取开始计算
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=365),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
}
注意JWT_RESPONSE_PAYLOAD_HANDLER、JWT_PAYLOAD_HANDLER
实现自定义返回内容
utils.jwt_payload.py
from rest_framework_jwt.settings import api_settings
from rest_framework_jwt.utils import jwt_decode_handler
import datetime
def jwt_response_payload_handler(token, user=None, request=None):
"""为返回的结果添加用户相关信息"""
return {
'status_code': 20000,
'token': token,
}
def get_jwt_token(user):
# JWT做状态保持的时机是:用户注册成功之后,返回结果之前
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
# 当前的注册用户对象
payload = jwt_payload_handler(user)
# JWT token
token = jwt_encode_handler(payload)
return token
def jwt_payload_handler(user, exp=datetime.datetime.utcnow() + api_settings.JWT_EXPIRATION_DELTA):
payload = {} # 返回的荷载信息
payload['user_name'] = user.first_name
payload['exp'] = exp
payload['user_id'] = user.id
payload['phone'] = user.userinfo.phone
payload['cover_img'] = user.userinfo.cover_img
return payload