在django中创建User对象的各种方法有什么区别?

时间:2015-09-19 11:45:33

标签: python django object

我搜索过,但找不到合适的答案。目前在django中,我们有三种方法可以使用自定义管理器创建用户 -

1)通过创建对象实例并在其上调用save() -

u = User(name="some_name", password="some_password")
u.save()

2)通过在经理上调用create() -

u = User.objects.create(name="some_name", password="some_password")

3)通过在经理上调用create_user() -

u = User.objects.create_user(name="some_name", password="some_password")

诸如每个人如何在内部工作以及他们如何相似和不同的信息将非常有用。

2 个答案:

答案 0 :(得分:3)

方法1)和2)是创建模型实例的通用方法。他们没有对User模型做任何特定的事情。

这意味着您设置为密码的值不会被散列,而是按原样保存。 Django不会认为是一个正确的盐渍和哈希密码,你无法登录。

要正确设置密码,请使用User.set_password()

u = User(name="some_name")
u.set_password("some_password")
u.save()

请注意,如果没有其他数据库查询,则无法对方法2执行相同的操作。

方法3)是一个便捷函数,它处理User模型的所有细节,就像散列密码一样。

答案 1 :(得分:1)

1)和2)在他们的工作方面完全相同。不同之处在于,使用方法1,您明确选择何时使用save将对象提交到数据库。

关于3,这是来自文档:

  

create_user(用户名,电子邮件=无,密码=无,** extra_fields)

     

创建,保存并返回用户。

     

用户名和密码设置为给定。域的部分   电子邮件自动转换为小写,并返回用户   object将is_active设置为True。

     

如果未提供密码,将调用set_unusable_password()。

     

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

所以create_user看起来像是对电子邮件应用小写过滤器,并设置了不可用的密码(阻止用户登录)。