django自定义user认证系统

第一种,彻底推翻django的user认证系统,重新定义我们想要的字段

from django.contrib.auth.models import AbstractBaseUser,PermissionsMixin,BaseUserManager
from shortuuidfield import ShortUUIDField
from django.db import models
from django.contrib.auth.models import User
from django.contrib.auth.models import AbstractUser
class UserManager(BaseUserManager):
    def _create_user(self,telephone,password,grade,**kwargs):
        if not telephone:
            raise ValueError('请输入电话号码')
        if not password:
            raise ValueError('请输入密码')
        if not grade:
            raise ValueError('请选择班级')
        user = self.model(telephone=telephone,password=password,**kwargs)
        return user
    def create_user(self,telephone,password,grade,**kwargs):
        kwargs['is_superuser'] = False
        kwargs['is_staff'] = False
        return self._create_user(telephone,password,grade,**kwargs)

    def create_superuser(self,telephone,password,grade,**kwargs):
        kwargs['is_superuser'] = True
        kwargs['is_staff'] = True
        return self._create_user(telephone, password, grade, **kwargs)

class User(AbstractBaseUser,PermissionsMixin):
    email = models.EmailField(unique=True)
    username = models.CharField(max_length=150)
    telephone = models.CharField(max_length=11,unique=True)
    is_active = models.BooleanField(default=True)

    USERNAME_FIELD = 'telephone'
    REQUIRED_FIELDS = []
    objects = UserManager()
    def get_full_name(self):
        return self.username
    def get_short_name(self):
        return self.username

第二种,在django自带的user认证系统中添加自己想要的字段

from django.contrib.auth.models import AbstractBaseUser,PermissionsMixin,BaseUserManager
from shortuuidfield import ShortUUIDField
from django.db import models
from django.contrib.auth.models import User
from django.contrib.auth.models import AbstractUser

class UserManager(BaseUserManager):
    use_in_migrations = True

    def _create_user(self,telephone,password,school,**extra_fields):
        if not telephone:
            raise ValueError('请填写手机号码')
        if not password:
            raise ValueError('请填写密码')
        user = self.model(telephone=telephone, school=school,**extra_fields)
        user.set_password(password)
        user.save()
        return user

    def create_user(self,telephone,password, school,**extra_fields):
        extra_fields.setdefault('is_superuser',False)
        extra_fields.setdefault('is_staff',False)
        return self._create_user(telephone=telephone,password=password,school=school,**extra_fields)

    def create_superuser(self,telephone,password, school,**extra_fields):
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_staff', True)
        return self._create_user(telephone=telephone,password=password,school=school,**extra_fields)


class User(AbstractUser):
    telephone = models.CharField(max_length=11,unique=True)
    school = models.CharField(max_length=20)
    objects = UserManager()
    USERNAME_FIELD = 'telephone'
    REQUIRED_FIELDS = []

猜你喜欢

转载自www.cnblogs.com/fengzi7314/p/10440137.html