如何使用电子邮件而不是用户名进行用户身份验证

Ram*_*ttu 15 django

可能重复:
在Django中接受电子邮件地址作为用户名

与Django一起提供的身份验证模型基于用户名.

如何根据电子邮件而不是用户名更改身份验证?

更具体一点:

使用用户名验证,登录用户我们执行以下操作:

 user = authenticate(name,password)
 .......
 login(request,user)
Run Code Online (Sandbox Code Playgroud)

如果我们使用电子邮件进行身份验证,请写上述语句的内容?

形式:

我打算编写自己的表单,显示字段电子邮件,密码和验证.这是正确的方法吗?

Est*_*ber 7

我在阅读这个重复的问题时找到了这个片段.还要检查此代码:

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 )
Run Code Online (Sandbox Code Playgroud)

这两个答案都不是我的.向另一个主题投票给业主以获得业力提升.我只是在这里复制它们以使这个线程尽可能完整.


Van*_*ale 5

查看此代码段,并阅读评论以获取更新.

对于表单,为什么不直接从(或直接使用)auth登录表单继承.请参阅django/contrib/auth/forms.py


jer*_*ear 1

听起来你可以用“电子邮件”一词掩盖用户名,所有用户名只会显示电子邮件。