0

我使用这个简单的代码在我的 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>."))
4

3 回答 3

1

“如果是帮助文本,它会打印什么?” -> 它打印的正是这个:使用 '[algo]$[salt]$[hexdigest]'

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

其中:以该应用程序使用的格式创建一个散列密码。它需要一个强制性参数:纯文本密码。或者,如果您不想使用默认值(PASSWORD_HASHERS 设置的第一个条目),您可以提供要使用的盐和散列算法。当前支持的算法有:'pbkdf2_sha256'、'pbkdf2_sha1'、'bcrypt'(参见 Using bcrypt with Django)、'sha1'、'md5'、'unsalted_md5'

你有这方面的问题吗?

于 2012-05-15T11:06:26.263 回答
1

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

请参阅有关创建用户的文档。

于 2012-05-15T11:21:16.280 回答
0

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

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

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

于 2012-05-15T13:38:49.760 回答