Python 如何在django rest框架simple jwt中使用自定义模型用户
SimpleJWT目前使用超级用户发布令牌,但我想使用我的自定义用户模型。(我定义的自定义用户模型如下。)Python 如何在django rest框架simple jwt中使用自定义模型用户,python,django,django-rest-framework,django-rest-framework-jwt,django-rest-framework-simplejwt,Python,Django,Django Rest Framework,Django Rest Framework Jwt,Django Rest Framework Simplejwt,SimpleJWT目前使用超级用户发布令牌,但我想使用我的自定义用户模型。(我定义的自定义用户模型如下。) 类用户(models.Model): id=models.AutoField(主键=True) name=models.CharField(max_length=10,unique=True,blank=False) 密码=models.CharField(最大长度=128) 定义报告(自我): 返回自我__ 类UsersSerializer(serializers.ModelSerial
类用户(models.Model):
id=models.AutoField(主键=True)
name=models.CharField(max_length=10,unique=True,blank=False)
密码=models.CharField(最大长度=128)
定义报告(自我):
返回自我__
类UsersSerializer(serializers.ModelSerializer):
类元:
模型=用户
字段=(“名称”、“密码”)
我的问题是,我可以在SimpleJWT上使用自定义用户模型接收令牌吗
如果simple jwt使用自定义用户模型,请告诉我如何使用自定义用户模型。这对我很有用,请尝试 假设您正确安装了djangorestframework\u simplejwt 只需将此粘贴在您的 设置.py
REST_AUTH_SERIALIZERS = {
'USER_DETAILS_SERIALIZER': 'users.serializers.UserSerializer',
}
class UserSerializer(serializer.ModelSerializer):
class Meta:
model = get_user_model()
fields = []
read_only_fields = ( ,)
这里UserSerializer使用CustomUserModel,即。
序列化程序.py
REST_AUTH_SERIALIZERS = {
'USER_DETAILS_SERIALIZER': 'users.serializers.UserSerializer',
}
class UserSerializer(serializer.ModelSerializer):
class Meta:
model = get_user_model()
fields = []
read_only_fields = ( ,)
并添加序列化程序,该序列化程序覆盖TokenGetPairView的默认序列化程序验证方法
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
# The default result (access/refresh tokens)
data = super().validate(attrs)
refresh = self.get_token(self.user)
# assign token
data['refresh'] = str(refresh)
data['access'] = str(refresh.access_token)
# extra fields
data['age'] = self.user.age
return data
借助于此,我在调用登录端点时获得了定制用户的“年龄”模型字段。
在视图类中使用此序列化程序,然后调用此视图的url
调用此url后
返回的数据如下:
{
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..............",
"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...............",
"username": "Shubham",
"id": 4,
"age": 100,
"description": "Slow shubham gadwal mehra try to understand."
}这对我很有效,试试看 假设您正确安装了djangorestframework\u simplejwt 只需将此粘贴在您的 设置.py
REST_AUTH_SERIALIZERS = {
'USER_DETAILS_SERIALIZER': 'users.serializers.UserSerializer',
}
class UserSerializer(serializer.ModelSerializer):
class Meta:
model = get_user_model()
fields = []
read_only_fields = ( ,)
这里UserSerializer使用CustomUserModel,即。
序列化程序.py
REST_AUTH_SERIALIZERS = {
'USER_DETAILS_SERIALIZER': 'users.serializers.UserSerializer',
}
class UserSerializer(serializer.ModelSerializer):
class Meta:
model = get_user_model()
fields = []
read_only_fields = ( ,)
并添加序列化程序,该序列化程序覆盖TokenGetPairView的默认序列化程序验证方法
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
# The default result (access/refresh tokens)
data = super().validate(attrs)
refresh = self.get_token(self.user)
# assign token
data['refresh'] = str(refresh)
data['access'] = str(refresh.access_token)
# extra fields
data['age'] = self.user.age
return data
借助于此,我在调用登录端点时获得了定制用户的“年龄”模型字段。
在视图类中使用此序列化程序,然后调用此视图的url
调用此url后
返回的数据如下:
{
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..............",
"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...............",
"username": "Shubham",
"id": 4,
"age": 100,
"description": "Slow shubham gadwal mehra try to understand."
}