Accepting email address as username in Django

后端 未结 12 2051
感动是毒
感动是毒 2020-11-28 19:48

Is there a good way to do this in django without rolling my own authentication system? I want the username to be the user\'s email address instead of them creating a userna

12条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-28 20:22

    Here's what we do. It isn't a "complete" solution, but it does much of what you're looking for.

    from django import forms
    from django.contrib import admin
    from django.contrib.auth.admin import UserAdmin
    from django.contrib.auth.models import User
    
    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(UserAdmin):
        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)
    

提交回复
热议问题