因为登陆的接口不是我们写的,所以返回格式不符合我们的预期,下面就开始详细地展示如何定制返回格式
方法一:重写全局钩子函数
首先编写序列化类,给登陆接口用。
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
class CommonTokenObtainSerializer(TokenObtainPairSerializer):
# 重写全局钩子, 用原来的进行校验, 返回字典
def validate(self, attrs):
dic = super().validate(attrs)
data = {
'code': 100,
'msg': '登陆成功',
'username': self.user.username,
'refresh': dic.get('refresh'),
'access': dic.get('access')
}
return data
然后在设置里面输入下面的,将它变成我们自己写的序列化类
方法二:重写荷载
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
class CommonTokenObtainSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
# super()代指父类对象
# 对象调用类的绑定方法,会自动吧对象的类传入
token = super().get_token(user)
token['name'] = user.username
return token
def validate(self, attrs):
token = self.get_token(self.user)
data = {
'code': 100,
'msg': '登陆成功',
'username': self.user.username,
'refresh': str(token),
'access': str(token.accrss_token)
}
return data