Django 中 User.objects.create_user() 与 User.objects.create() 与 User().save() 之间的区别

ahm*_*ama 4 django django-models django-authentication

在 Django 文档中,它用于User.objects.create_user()创建用户。我很困惑,是什么,之间的差异User.objects.create()以及User().save()它们是正常的方式来创建其他车型的对象

nim*_*smi 8

最显着的区别是,如果您为该.create()方法提供密码,它将在用户上逐字设置,并且不能用于对用户进行身份验证。

>>> user = User.objects.create(username="foo", password="bar")
>>> user.password
'bar'
Run Code Online (Sandbox Code Playgroud)

相反,该create_user()方法对密码参数进行哈希处理。

>>> user = User.objects.create_user(username="foo", password="bar")
>>> user.password
'pbkdf2_sha256$120000$2pHBVu3tYYbK$ESG1nbUY2ZhEmstJ7Fzu1DioXmGYXiLw31YDkOGn9E0='
Run Code Online (Sandbox Code Playgroud)

请参阅https://github.com/django/django/blob/master/django/contrib/auth/models.py#L145

其他一些“整理”也完成了。请参阅上面链接的其余功能。


小智 6

User.objects.create_user()是一个辅助函数,它提供了有用的实用程序来创建用户,否则您必须自己创建用户。根据文档:

\n
\n

创建、保存并返回用户

\n

用户名和密码设置为给定的。电子邮件的域部分会自动转换为小写,返回的 User 对象将设置is_activeTrue

\n

如果没有提供密码,set_unusable_password()将会被呼叫。

\n

关键字extra_fields参数传递给 User\xe2\x80\x99s__init__方法,以允许在自定义用户模型上设置任意字段。

\n
\n

没有create_user()您可以使用您提到的方法自己创建功能,但它提供了有用的处理和实用程序。

\n