与Django一起提供的身份验证模型基于 用户名。
如何更改基于电子邮件的身份验证而不是 用户名?
更具体一点:
使用用户名验证,登录用户我们会执行以下操作:
user = authenticate(name,password)
.......
login(request,user)
如果我们要进行身份验证,请为上述声明撰写内容 使用电子邮件?
表单:
我打算写自己的表格来显示字段 电子邮件,密码和验证。 这是正确的方法吗?
答案 0 :(得分:7)
我在阅读重复的问题时找到了this snippet。另请检查this code:
class UserForm( forms.ModelForm ):
class Meta:
model= User
exclude= ('email',)
username = forms.EmailField(max_length=64,
help_text = "The person's email address.")
def clean_email( self ):
email= self.cleaned_data['username']
return email
class UserAdmin( admin.ModelAdmin ):
form= UserForm
list_display = ( 'email', 'first_name', 'last_name', 'is_staff' )
list_filter = ( 'is_staff', )
search_fields = ( 'email', )
admin.site.unregister( User )
admin.site.register( User, UserAdmin )
这两个答案都不是我的。向另一个主题投票给业主以获得业力提升。我只是将它们复制到这里以使这个线程尽可能完整。
答案 1 :(得分:5)
查看this snippet,阅读更新评论。
对于表单,为什么不直接从(或直接使用)auth登录表单继承。见django / contrib / auth / forms.py
答案 2 :(得分:3)
请参阅以下链接,说明我们应该如何解决问题。
http://groups.google.com/group/django-users/browse_thread/thread/c943ede66e6807c
答案 3 :(得分:1)
听起来你可以用“电子邮件”这个词掩盖用户名,所有用户名只会显示电子邮件。
答案 4 :(得分:-1)
除非我错过了什么,否则解决方案应该非常简单;只需使用文本字段和密码字段创建一个普通表单。当HTTP请求方法是POST时,尝试使用给定的电子邮件地址获取用户。如果此类用户不存在,则表示您有错误。如果用户确实存在,请尝试对用户进行身份验证并将其登录。