Django 自定义用户验证-模型

  1. 创建user app
> django-admin startapp user
  1. 添加user.appsettings.py -> INSTALLED_APPS
  2. 修改user.models.py文件
from django.contrib.auth.base_user import BaseUserManager, AbstractBaseUser
from django.contrib.auth.models import PermissionsMixin
from django.db import models


# Create your models here.
class MyUserManager(BaseUserManager):

    def _create_user(self, username, password, **kwargs):
        """
        Create and save a user with the given username, email, and password.
        """
        if not username:
            raise ValueError('The given username must be set')
        if not password:
            raise ValueError('The given password must be set')
        userIns = self.model(username=username, **kwargs)
        userIns.set_password(password)
        userIns.save(using=self._db)
        # UserProfile.objects.create(user=userIns)
        return userIns

    def create_user(self, username: str, password: str = None, **kwargs):
        kwargs.setdefault('is_superuser', False)
        return self._create_user(username, password, **kwargs)

    def create_superuser(self, username: str, password: str = None, **kwargs):
        kwargs.setdefault('is_superuser', True)
        if kwargs.get('is_superuser') is not True:
            raise ValueError('Superuser must have is_superuser=True.')
        return self._create_user(username, password, **kwargs)


# Create your models here.
class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=16, unique=True, blank=False, null=False)
    # 是否有登录后台Admin的权限
    is_staff = models.BooleanField(default=False)
    # 设置自定义模型类 唯一标识用户的字段.
    USERNAME_FIELD = 'username'
    # 定义通过命令行 `python manage.py createsuperuser` 时必填的字段

    objects = MyUserManager()

    class Meta:
        db_table = 'user_tbl'

  1. 编辑settings.py文件, 增加自定义用户模型类配置
AUTH_USER_MODEL = 'user.User'
  1. 执行模型迁移命令
python manage.py makemigrations
python manage.py migrate
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容