【发布时间】:2017-10-03 13:54:55
【问题描述】:
我是 Django 和 DRF 的新手,但我正在尝试使用 DRF 的序列化程序来覆盖 djosers 的默认用户注册行为。
(djoser = 用于用户注册/登录/密码重置等的 DRF 库)
我有 djosers 视图,它使用序列化程序创建用户对象def perform_create(self, serializer):
user = serializer.save()
我的想法是重写此序列化程序以实现以下目标:
- 创建用户
- 并行创建帐户对象
- 登录用户
- 在一个响应中返回帐户对象和身份验证令牌
最后一点给我带来了麻烦,因为我不知道如何在序列化程序中实现这种自定义行为。我将输入字段设为只读,因此它们不包含在我的回复中。在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
【问题讨论】:
标签: django python-2.7 django-rest-framework django-serializer