在django中,创建用户的流程与通常的Model实例创建不同。您需要调用create_user()
,这是的方法BaseUserManager
。
由于django REST框架的流程是restore_object()
then然后执行的save_object()
,因此无法ModelSerializer
在通用的create API端点中简单地使用来创建Users ,而不会弄乱您的方法。
有什么干净的方法可以解决这个问题?还是至少使用Django的内置管道使其工作?
编辑:
需要特别注意的是,django.contrib.auth.authenticate
如果实例只是使用User.objects.create()
and not创建的,一旦尝试使用它对创建的用户实例进行身份验证就会失败,这特别不起作用.create_user()
。
最终,我重写了序列化器的restore_object
方法,并确保随后使用来处理发送的密码instance.set_password(password)
,如下所示:
def restore_object(self, attrs, instance=None):
if not instance:
instance = super(RegisterationSerializer, self).restore_object(attrs, instance)
instance.set_password(attrs.get('password'))
return instance
谢谢大家的帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句