【Django学习】(十六)session_token认证过程与区别_响应定制

一、认识session与token

这里就直接引用别人的文章,不做过多说明

网络应用中session和token本质是一样的吗,有什么区别? - 知乎

二、token响应定制

在全局配置表中配置

'DEFAULT_AUTHENTICATION_CLASSES': [
        # 指定jwt Token认证
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication'

rest_framework_jwt/views.py中

【Django学习】(十六)session_token认证过程与区别_响应定制_第1张图片

 查看ObtainJSONWebToken类:

发现里面引用了JSONWebTokenSerializer序列化器类

【Django学习】(十六)session_token认证过程与区别_响应定制_第2张图片​ users应用的url.py

引用obtain_jwt_token

from django.urls import path
from interfaces import views
from  rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [

    path('login/', obtain_jwt_token)
]

 发现rest_framework_jwt/views.py中有提供post方法:

【Django学习】(十六)session_token认证过程与区别_响应定制_第3张图片

 登录之后发现输出只有返回token字段【Django学习】(十六)session_token认证过程与区别_响应定制_第4张图片

 如果我们想让user_id和user_name也输出的话,我们就要定制输出了

查看rest_framework_jwt/views.py中post方法里面有调用jwt_response_payload_handler方法

【Django学习】(十六)session_token认证过程与区别_响应定制_第5张图片​ 

 【Django学习】(十六)session_token认证过程与区别_响应定制_第6张图片

 【Django学习】(十六)session_token认证过程与区别_响应定制_第7张图片

 如果不需要改写,可以在项目setting.py文件中直接引用

JWT_AUTH={
    'JWT_RESPONSE_PAYLOAD_HANDLER':
        'rest_framework_jwt.utils.jwt_response_payload_handler',
}

 终于在rest_framework_jwt.utils.py文件中发现了jwt_response_payload_handler

【Django学习】(十六)session_token认证过程与区别_响应定制_第8张图片

 所以我们要改写这个方法:

本地项目的utils文件夹中新建一个handler_jwt_response.py

def jwt_response_payload_handler(token, user=None, request=None):
    """
    Returns the response data for both the login and refresh views.
    Override to return a custom response such as including the
    serialized representation of the User.

    Example:

    def jwt_response_payload_handler(token, user=None, request=None):
        return {
            'token': token,
            'user': UserSerializer(user, context={'request': request}).data
        }

    """
    return {
        'user_id': user.id,
        'user_name': user.username,
        'token': token
    }

 改写之后,还要在全局配置表里修改引用路径

JWT_AUTH={
    'JWT_RESPONSE_PAYLOAD_HANDLER':
        # 'rest_framework_jwt.utils.jwt_response_payload_handler',
        'utils.handler_jwt_response.jwt_response_payload_handler',
}

运行得到想要的结果

【Django学习】(十六)session_token认证过程与区别_响应定制_第9张图片

你可能感兴趣的:(学习,django,python,后端)