方式1, OneToOneField

from django.contrib.auth.models import User
class
UserProfile(models.Model): user = models.OneToOneField(User) major = models.TextField(default='', blank=True) address = models.CharField(max_length=200,default='',blank=True)
AUTH_PROFILE_MODULE = 'djangoadmin.myadmin.UserProfile'
settings.py
class ProfileInline(admin.StackedInline):
    model = UserProfile
    #fk_name = 'user'
    max_num = 1
    can_delete = False

class CustomUserAdmin(UserAdmin):
    inlines = [ProfileInline,]

admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
admin.py(如果需要)

 

 

 

方式2,AbstractUser

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    nid = models.AutoField(primary_key=True)
    nickname = models.CharField(verbose_name='昵称', max_length=32)
    telephone = models.CharField(max_length=11, null=True, unique=True)
    avatar = models.FileField(upload_to='avatar/', default="/avatar/default_avatar.jpg")
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)

Settings.py:

AUTH_USER_MODEL = "user.UserInfo"

 

 

 

方式3,Signal

from django.db import models  
from django.contrib.auth.models import User, UserManager  
from .signals import *  
      
class CustomUser(User):  
      description = models.TextField(max_length=256, default="",blank=True)  
      headImage = models.ImageField(upload_to='/media/image/users/',null=True, blank=True)  
      scope = models.IntegerField(default=100)  
      objects = UserManager()  
# signal.py
from django.db.models.signals import post_save  
from django.contrib.auth.models import User  
def create_user_detail(sender, instance, signal, *args, **kwargs):  from .models import CustomUser  
     if kwargs['created']:  
         u = CustomUser()  
         u.__dict__.update(instance.__dict__)  
         u.save()  
      
post_save.connect(create_user_detail, sender=User)  

Settings.py

CUSTOM_USER_MODEL = 'UserProfile.CustomUser'  

 

 

 

自定义认证

from django.conf import settings
from django.contrib.auth.backends import ModelBackend
from django.core.exceptions import ImproperlyConfigured
from django.db.models import get_model

class CustomUserModelBackend(ModelBackend):
    def authenticate(self, username=None, password=None):
        try:
            user = self.user_class.objects.get(username=username)
            if user.check_password(password):
                return user
        except self.user_class.DoesNotExist:
            return None

    def get_user(self, user_id):
        try:
            return self.user_class.objects.get(pk=user_id)
        except self.user_class.DoesNotExist:
            return None

    @property
    def user_class(self):
        if not hasattr(self, '_user_class'):
            self._user_class = get_model(*settings.CUSTOM_USER_MODEL.split('.', 2))
            if not self._user_class:
                raise ImproperlyConfigured('Could not get custom user model')
        return self._user_class
自定义认证

settings.py

AUTHENTICATION_BACKENDS = (
   'myproject.auth_backends.CustomUserModelBackend',
)
settings.py