如何在 Django 中使用序列化程序 return 自定义非模型值?
How to return a custom, non model value with serializer in Django?
我想 return 来自我的序列化程序的自定义值。我正在为用户获取身份验证令牌,并希望将它们 return 作为注册过程的一部分。目前我正在 returning 用户对象,但我不知道如何将标记添加到 return 对象中,因为标记不是我的用户模型的一部分。这是序列化程序:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
exclude = ['password', 'is_active', 'staff', 'admin', 'last_login']
def create(self, validated_data):
userName= validated_data['userName']
id= validated_data['id']
dateOfBirth = validated_data['dateOfBirth']
gender = validated_data['gender']
height = validated_data['height']
weight = validated_data['weight']
user = User(userName=userName, id=id, dateOfBirth=dateOfBirth, gender=gender, height=height, weight=weight)
user.set_password("")
user.save()
try:
jwt_token = get_tokens_for_user(user)
except User.DoesNotExist:
raise serializers.ValidationError(
'User does not exists'
)
return user
userName、id、dateOfBirth、height 和 weight 是我的用户模型中的字段。现在我还想 return create
中的 jwt_token
在我的 views.py
中使用的方法,是否可以在不编辑的情况下将其添加到用户对象模特?
您可以 return 包含 user
和 jwt_token
的元组,如下所示:
return (user, jwt_token)
以及 views.py
中的类似内容:
instance, token = serializer.save()
但是如果您使用任何预定义的 Veiwset 或 Mixins 当您将此序列化程序传递给它们时请小心。
希望对您有所帮助。
您可以尝试这样的操作:
try:
jwt_token = get_tokens_for_user(user)
except User.DoesNotExist:
raise serializers.ValidationError(
'User does not exists'
)
created_data = {
'token_access': jwt_token, # note that jwt_token is dict
'user': UserSerializer(user).data,
}
return created_data
但老实说,我建议您不要混合使用用户和令牌逻辑并将此部分移至视图部分:
try:
jwt_token = get_tokens_for_user(user)
except User.DoesNotExist:
raise serializers.ValidationError(
'User does not exists'
)
然后在Response
中写入token和user
我想 return 来自我的序列化程序的自定义值。我正在为用户获取身份验证令牌,并希望将它们 return 作为注册过程的一部分。目前我正在 returning 用户对象,但我不知道如何将标记添加到 return 对象中,因为标记不是我的用户模型的一部分。这是序列化程序:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
exclude = ['password', 'is_active', 'staff', 'admin', 'last_login']
def create(self, validated_data):
userName= validated_data['userName']
id= validated_data['id']
dateOfBirth = validated_data['dateOfBirth']
gender = validated_data['gender']
height = validated_data['height']
weight = validated_data['weight']
user = User(userName=userName, id=id, dateOfBirth=dateOfBirth, gender=gender, height=height, weight=weight)
user.set_password("")
user.save()
try:
jwt_token = get_tokens_for_user(user)
except User.DoesNotExist:
raise serializers.ValidationError(
'User does not exists'
)
return user
userName、id、dateOfBirth、height 和 weight 是我的用户模型中的字段。现在我还想 return create
中的 jwt_token
在我的 views.py
中使用的方法,是否可以在不编辑的情况下将其添加到用户对象模特?
您可以 return 包含 user
和 jwt_token
的元组,如下所示:
return (user, jwt_token)
以及 views.py
中的类似内容:
instance, token = serializer.save()
但是如果您使用任何预定义的 Veiwset 或 Mixins 当您将此序列化程序传递给它们时请小心。
希望对您有所帮助。
您可以尝试这样的操作:
try:
jwt_token = get_tokens_for_user(user)
except User.DoesNotExist:
raise serializers.ValidationError(
'User does not exists'
)
created_data = {
'token_access': jwt_token, # note that jwt_token is dict
'user': UserSerializer(user).data,
}
return created_data
但老实说,我建议您不要混合使用用户和令牌逻辑并将此部分移至视图部分:
try:
jwt_token = get_tokens_for_user(user)
except User.DoesNotExist:
raise serializers.ValidationError(
'User does not exists'
)
然后在Response