DJango中文用户名与email认证的解决方案
作者:半瓶墨水 链接:http://www.2maomao.com/blog/django-unicode-username/
DJango中username要求是字母数字或者下划线,唉,真土,web都2.0了,还只给注册英文用户名。
而且现在多数网站用邮箱地址做认证,而DJango的认证函数是:authenticate(username=’foo’, password=’bar’),又不想自己写一个backend。
怎么办呢?绕道吧。
中文用户名:
1. 因为username是必须的,所以找个方法构造一个吧,比如查出目前最大的ID,把ID加一作为用户名
2. 然后把firstname作为中文用户名
3. 做registerform的时候自己写,认证的时候就按firstname来搜
email认证:
1. 注册的时候用form validate的方式保证其唯一性
2. 登陆的时候,先用email查出用户名再用authenticate函数。
不知道这样做有没有什么坏处,或者目前还有什么更好的方法,请高手指教。
BTW: 我喜欢把所有验证、认证代码发在form里,view中只做事情就行了
更加BT的W: 可以在login form里面通过检查是否包含@来做email、用户名双登陆。



中文用户名我发现没有什么问题,很容易解决。
但email登陆有点麻烦,虽然有人写了一个 backend,但问题还是很多,主要就是 email 字段在user表可能在注册时会出现重复email。我现在是手动先查找一下,但感觉这样非常破坏代码的美感。
@kevin.anew
中文用户名如果不绕道的话在Admin界面就有问题
Email登陆我倒觉得不是很麻烦,用Newform在clean_email里面做验证,很方便啊
我是直接放在 newform 的 save 里,但是这样数据库的效率感觉总是非常低。
在 save 时看看有没有错误,没有就在 save 时直接插入 User ,有的话就返回一个 newform.errors
我不知道你在 clean_email 里如何写的,方便的话,mail 一份代码给我,讨论讨论~~ Django的auth模块设计的不怎么样~~
@kevin.anew
好的,欢迎Gmail讨论。