jwt定制返回格式

发布时间 2024-01-03 20:46:11作者: wellplayed

定制返回格式

 

目标如下:

想要返回如下格式数据:

{
    code:100,
    msg:'登录成功',
    username:'登录用户名字',
    access:asdfasdf.asdfasdf.asdfasdf
    refresh:asdfas.ere.we
}

 

第一步:新建一个序列化类文件,以serializer.py为例

第二步:书写序列化类 以MyTokenObtainPairSerializer为例,并重写validate(全局钩子)方法

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
        # 往荷载中加东西
        @classmethod
        def get_token(cls, user):  # user就是登录成功,查到的用户
            token = super().get_token(user)  # 签发token
            token['name'] = user.username  # 往荷载中加用户名
            return token

        def validate(self, attrs):
            old_data = super().validate(attrs)
            data = {'code': 100,
                    'msg': '登录成功',
                    'username': self.user.username,
                    'refresh': old_data['refresh'],
                    'access': old_data['access']
                    }
            return data

类方法:get_token  返回的token内 就是荷载的内容

 

第三步:settings文件配置

SIMPLE_JWT = {
"TOKEN_OBTAIN_SERIALIZER": "app01.serializer.MyTokenObtainPairSerializer",
}