Django REST框架串行器输出
问题描述:
我是Django和DRF的新手,但我试图使用DRF的串行器来覆盖djosers的默认用户注册行为。
(左塞尔=一个DRF LIB用于用户注册/登录/密码复位等)Django REST框架串行器输出
我djosers查看,使用串行化器中创建用户对象def perform_create(self, serializer): user = serializer.save()
我的想法是覆盖此串行化器来实现以下内容:
- 创建用户
- 创建并联
- LO中的帐户对象杜松子酒用户
- 回报帐户对象一起与身份验证令牌在一个响应
最后一点给我的麻烦,因为我不知道如何实现串行这种自定义行为。我只是输入字段,所以它们不包含在我的回复中。在save
方法中,创建一个用户+帐户对象,登录用户,然后返回用户(视图需要)
如何将创建的帐户对象与创建的令牌字符串序列化为一个响应?
这是我的串行(简体和一些东西剥离,但基本上它)
class UserRegistrationSerializer(serializers.Serializer):
email = serializers.EmailField(write_only=True)
# some other fields
password = serializers.CharField(style={'input_type': 'password'},
write_only=True,
validators=settings.get('PASSWORD_VALIDATORS')
)
# this should be the output
account = Account(read_only=True)
def save(self):
user = User(email=self.validated_data['email'])
user.set_password(self.validated_data['password'])
user.save()
account = Account(user=user)
token = #logging in my user
return user
答
使用本:
class UserRegistrationSerializer(serializers.ModelSerializer):
email = serializers.EmailField(write_only=True)
# some other fields
password = serializers.CharField(
style={'input_type': 'password'},
write_only=True,
validators=settings.get('PASSWORD_VALIDATORS')
)
# make sure you have related_name='account' in your one to one field
account = AccountSerializer(read_only=True)
# the token field
auth_token = TokenSerializer(read_only=True)
class Meta:
model = User
# define fields based on your needs
fields = ...
def create(self, validated_data):
user = User(email=self.validated_data['email'])
user.set_password(self.validated_data['password'])
user.save()
# create account
account = Account(user=user)
# create token for user
token = Token.objects.update_or_create(user=user)
return user
,你还需要创建一个基于update
方法您的自定义需求。
甜,这是诀窍!但是,这仅适用于用户模型对帐户模型和令牌模型的引用。就未来而言,如何将一个完全无用的用户序列化为响应? – JimmyVanBraun
@JimmyVanBraun您可以使用方法字段。请查看http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield –