飞行的猪哼哼

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一:代码追踪分析:

1:首先在路由位置开始追踪:

re_path(r'^authorizations/$', obtain_jwt_token),

2:第一层追踪:找到ObtainJSONWebToken在这里插入图片描述
3:第二层追踪:父类是JSONWebTokenAPIView,序列化器是JSONWebTokenSerializer。
在这里插入图片描述
4:代码追踪上层,不追踪序列化器。
在这里插入图片描述
5:继续向下追踪开看看django自己定义的返回格式是怎样的呢??
在这里插入图片描述
发现追踪到配置文件指定的类了。我们导包继续追踪:
在任意位置导包:按住ctrl + 鼠标点击jwt_response_payload_handler 继续追踪。

from rest_framework_jwt.utils import jwt_response_payload_handler 

在这里插入图片描述

6:返回到序号3追踪的位置:继续看看序列化器做了什么?
6.1:初始化方法:
在这里插入图片描述
6.2:最后一层校验方法:
在这里插入图片描述

二:如何自定义返回呢??
1:在自己项目任意位置重写jwt_response_payload_handler函数:
例如:我的项目位置:meiduo_mall.utils.jwt_response_handlers.jwt_response_payload_handler

def jwt_response_payload_handler(token, user=None, request=None):
    return {
      	# 补充返回username和user_id字段
        'username': user.username,
        'user_id': user.id,
        'token': token
    }

2:在配置文件中指定这个函数的位置:

JWT_AUTH = {
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'meiduo_mall.utils.jwt_response_handlers.jwt_response_payload_handler'
}
posted on 2020-09-28 17:06  飞行的猪哼哼  阅读(81)  评论(0)    收藏  举报