3

我正在开发一个使用Django 1.4的网站,并使用django注册注册过程。事实证明,不允许Unicode字符作为用户名,每当用户输入例如作为用户名注册失败的一部分的中文字符:Django用户名中的Unicode字符

此值可能只包含字母,数字和@ /。/ +/-/_字符。

是否可以更改它,以便在用户名中允许Unicode字符?如果是,我该怎么办?此外,它可以导致任何问题?

+0

虽然检索用户名和其他字段,你可以尝试在utf-8中编码它们,然后存储它们。尝试 - >编码('utf-8')。 –

+0

感谢您的建议。来自新加坡的用户向我报告,当他尝试使用仅包含拉丁字符的用户名进行注册时,他可以看到上述错误消息。他有他的系统和键盘配置为输入中文字符,所以我怀疑他输入的任何内容都被编码为Unicode。你认为转换到utf-8会解决这个问题吗? – piokuc

+0

是的,它应该做的伎俩。请查看我们的网站www.vialogues.com,尝试使用任何外语创建帐户。我们使用相同的东西,转换为utf-8。 –

回答

5

这真的不是问题 - 因为这个字符限制只在我记忆中的UserCreationForm(或RegistrationForm中的django注册)中,并且您可以很容易地创建自己的数据库字段只是正常的TextField。

但是那些限制不是没有理由的。我现在可以想到的其中一个可能的问题是创建链接 - 用户名经常用于此目的,并且可能会导致问题。还有与用户名寻找相同,但其实不同的字符是等

+1

你的回答完全不准确。那么,不是*完全*,关于仅由该形式施加的限制的一点是正确的。但是,Django和每个现代浏览器都具有完全unicode功能。 Unicode在URL中完全可以接受。另外,每个unicode字符都是唯一的字节码,所以'blah'和'bláh'*不是相同的,可以同时用作用户名。 –

+5

我是否告诉浏览器无法在任何地方使用?那么 - 我完全不是在谈论字节码,而是字符如何看起来以及如何让用户感到困惑 - f.e.告诉我“unicode”中完全不同的字符串“Аnnа”和“Anna”之间的区别。这是非常可能的使用它的某种骗局。 – jasisz

+0

@jasisz你能否给我更详细的信息,说明我应该怎么做才能解除限制?另外,在你的例子中,“Аnnа”和“Anna”之间的区别究竟是什么? – piokuc

1

Django的1.10现在正式支持Unicode用户名假账户的可能性较大,请参见:

在django.contrib中用户模型。 auth最初只接受用户名中的ASCII 字母。尽管这不是刻意的选择,但在使用Python 3时,Unicode 字符总是被接受。

用户名验证程序现在仅在Python 3上明确接受 默认的Unicode字母。可以使用ASCIIUsernameValidator或 UnicodeUsernameValidator,通过 更改用户模型的username_validator属性或该模型的任何 代理来覆盖此默认行为。自定义用户模型也可能使用那些 验证程序。

相关问题