我正在使用 Django 1.4 开发一个网站,并在注册过程中使用 django-registration。事实证明,Unicode 字符不允许作为用户名,每当用户输入例如中文字符作为用户名的一部分时,注册失败并显示:
该值只能包含字母、数字和@/./+/-/_ 字符。
是否可以更改它以便在用户名中允许使用 Unicode 字符?如果是,我该怎么做?另外,它会导致任何问题吗?
我正在使用 Django 1.4 开发一个网站,并在注册过程中使用 django-registration。事实证明,Unicode 字符不允许作为用户名,每当用户输入例如中文字符作为用户名的一部分时,注册失败并显示:
该值只能包含字母、数字和@/./+/-/_ 字符。
是否可以更改它以便在用户名中允许使用 Unicode 字符?如果是,我该怎么做?另外,它会导致任何问题吗?
这真的不是问题 - 因为这个字符限制仅在我记得的 UserCreationForm (或 django-registration 中的 RegistrationForm )中,并且您可以轻松地制作自己的,因为数据库中的字段只是普通的 TextField。
但这些限制并非没有原因。我现在能想到的一个可能的问题是创建链接 - 用户名通常用于此目的,它可能会导致问题。假帐户的用户名看起来相同但实际上是不同的字符等的可能性也更大。
Django 1.10现在正式支持 unicode 用户名,参见:
django.contrib.auth 中的用户模型最初只接受用户名中的 ASCII 字母。虽然这不是一个刻意的选择,但在使用 Python 3 时,Unicode 字符总是被接受的。
用户名验证器现在仅在 Python 3 上默认显式接受 Unicode 字母。可以通过更改 User 模型的 username_validator 属性或使用 ASCIIUsernameValidator 或 UnicodeUsernameValidator 更改该模型的任何代理来覆盖此默认行为。自定义用户模型也可以使用这些验证器。