【发布时间】:2013-11-15 03:47:36
【问题描述】:
在 django 中,创建用户与通常的模型实例创建具有不同且独特的流程。你需要调用create_user(),这是BaseUserManager的一个方法。
由于 django REST 框架的流程是先执行 restore_object(),然后执行 save_object(),因此无法在通用创建 API 端点中使用 ModelSerializer 简单地创建用户,而无需破解。
解决这个问题的干净方法是什么?或者至少使用 django 的内置管道让它工作?
编辑:
需要注意的重要一点是,一旦您尝试使用django.contrib.auth.authenticate 对创建的用户实例进行身份验证,如果该实例只是使用User.objects.create() 而不是.create_user() 创建的,则会失败。
【问题讨论】:
-
奇怪...我只使用
User.objects.create(),然后对用户进行身份验证。现在我需要弄清楚它为什么会起作用。 -
您是否也在创建时设置了用户密码?如果没有,没有理由不使用
create()。或者,如果您正在设置密码,您可以在保存后在 restore_object() 中单独调用user.set_password()(这里的问题是您将保存用户两次)。 -
是的,这里的密码是万恶之源。可能它以原始形式设置为 DB,这就是身份验证失败的原因,可能是@alexarsh 所建议的。我可能会做的是将所有逻辑形式
create_user()移动到save()方法。 -
@YuriPrezument,是的,密码设置是问题的根源。现在我在
restore_object()中使用user.set_password()设置它,但这发生在save()之前,所以你我们有点就可以了(:
标签: python django django-rest-framework