美文网首页
Django 默认 user 表的替换和扩充

Django 默认 user 表的替换和扩充

作者: 河码匠 | 来源:发表于2021-06-28 18:57 被阅读0次

User 表的扩充

  1. 需要继承 Django 的 user 的抽象类 AbstractUser

在 django user 表默认字段的基础上扩充

from django.contrib.auth.models import AbstractUser

class Customer(AbstractUser):
    USERNAME_FIELD = 'email'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []

    # 需要额外扩充的内容
    ....

可以重新指定 username 字段 USERNAME_FIELD
可以重新指定 email 的字段 EMAIL_FIELD
还有命令行在 createsuperuser 创建超级用户时提醒要输入信息的字段 REQUIRED_FIELDS

User 表的替换

抛弃 Django user 表中大部分字段。

  1. 在django setting.py 文件中添加 AUTH_USER_MODEL 配置指定你要使用的 User 表
AUTH_USER_MODEL = 'myapp.Customer'

配置完成后是无法启动成功的,因为缺少 django user 类的一些默认方法需要继承 AbstractBaseUser

抛弃绝大部分字段的原因是 AbstractBaseUser 中还有两个字段 password last_login。- -
AbstractBaseUser 里面是使用 django user 时的一些必要方法例如:set_passwordcheck_passwordget_username等。

from django.contrib.auth.base_user import AbstractBaseUser

class Customer(AbstractBaseUser):
    pass

不想创建 django auth 的表可以删除 django setting.py INSTALLED_APPSdjango.contrib.auth
但是还要删除 MIDDLEWARE 中关于身份验证的 django.contrib.auth.middleware.AuthenticationMiddleware 中间件。

  1. 要使用 createsuperuser 创建用户需要修改自定 user 表的 objects
from django.contrib.auth.models import BaseUserManager

class CustomerManager(BaseUserManager):
    # 重写 create_superuser 方法即可
    def create_superuser(self, email=None, password=None, **extra_fields):
        pass

class Customer(AbstractBaseUser):
    objects = CustomerManager()
  1. 如果只是要替换 user 表,还要使用其他 django.contrib.auth 中权限内容(如:group,permission等),需要在继承 PermissionsMixin
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.models import PermissionsMixin

class Customer(AbstractBaseUser, PermissionsMixin):
    pass

相关文章

网友评论

      本文标题:Django 默认 user 表的替换和扩充

      本文链接:https://www.haomeiwen.com/subject/yifcultx.html