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

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

一、认识session与token

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

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

二、token响应定制

在全局配置表中配置

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

rest_framework_jwt/views.py中

查看ObtainJSONWebToken类:

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

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方法:

登录之后发现输出只有返回token字段

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

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

如果不需要改写,可以在项目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

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

本地项目的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',
}

运行得到想要的结果

目录
打赏
0
0
0
0
29
分享
相关文章
Django框架和Flask框架的区别
总体而言,Django 适合需要快速搭建大型应用的开发者,而 Flask 则更适合有特定需求和追求灵活性的开发者。
123 64
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
161 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
这篇文章是关于如何使用Django框架的ORM系统在视图(views)层面进行数据库的增、删、改、查操作的教程。
31 0
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
111 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
Django后端架构开发:从匿名用户API节流到REST自定义认证
Django后端架构开发:从匿名用户API节流到REST自定义认证
53 0
Django视图层探索:GET/POST请求处理、参数传递与响应方式详解
Django视图层探索:GET/POST请求处理、参数传递与响应方式详解
Django和Flask框架的主要区别是什么?
Django与Flask是Python Web开发的两大框架,各有特色。Django遵循“约定优于配置”,提供全栈式解决方案,适合大型项目和快速开发,但定制性相对有限。Flask是微框架,核心简洁,注重灵活性和可扩展性,适用于小型项目、高度定制的复杂项目及API开发。选择框架应考虑项目需求、团队技能和开发者偏好。
94 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等