了解django中的用户类

时间:2012-05-15 10:52:32

标签: django

我使用这个简单的代码在view.py中创建了一个用户。

if not errors:
    user = User.objects.create_user(username, email, password)
    user.save()

除了验证之外,在创建对象之前,我没有对用户名和密码值做任何事情。

但我在Django API的User类中找到了这个。我不知道如何使用帮助文本。如果是帮助文本它打印什么?如何找到algo,salt和hexdigest的默认值?

password = models.CharField(_('password'), max_length=128, help_text=_("Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."))

3 个答案:

答案 0 :(得分:1)

“如果它是帮助文本它打印什么?” - &GT;它打印完全正确:使用'[algo] $ [salt] $ [hexdigest]'

创建用户时,它会自动调用make_password(password[, salt, hashers])

which:以此应用程序使用的格式创建散列密码。它需要一个强制参数:明文密码。 (可选)如果您不想使用默认值(PASSWORD_HASHERS设置的第一个条目),则可以提供salt和哈希算法。目前支持的算法是:'pbkdf2_sha256','pbkdf2_sha1','bcrypt'(参见使用带有Django的bcrypt),'sha1','md5','unsalted_md5'

你是否面临任何问题?

答案 1 :(得分:1)

create_user将自动生成密码哈希,它将在数据库中创建用户(因此您不需要user.save()

请参阅creating users上的文档。

答案 2 :(得分:0)

帮助文本基本上只是编辑用户对象时django管理员中显示的消息的代码。这意味着向查看编辑表单的人解释为什么密码字段具有类似sha1$12345$1234567890abcdef1234567890abcdef12345678的内容而不是为该用户设置的密码。原因是,密码是为了安全而进行哈希处理的,并且该表示包含稍后验证用户输入密码所需的所有信息。

管理员用户编辑表单有一个用于编辑密码的特殊页面。如果要在代码中编辑用户密码,请使用User对象的set_password方法,check_password方法用于验证提供的密码。

make_password的文档提供了有关Django使用和可以使用的算法的更多信息。 Django&lt; 1.3的默认值为sha1,Django 1.4将默认值更改为PBKDF2salt的默认值是一个随机字符串(它在那里,因此两个相同的密码在数据库中看起来不一样)。 Hexdigest是密码字符串的值,盐字符串与散列算法一起散列。您可以在github上的代码中阅读详细信息。