User 表的扩充
- 需要继承 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 表中大部分字段。
- 在django
setting.py文件中添加AUTH_USER_MODEL配置指定你要使用的 User 表
AUTH_USER_MODEL = 'myapp.Customer'
配置完成后是无法启动成功的,因为缺少 django user 类的一些默认方法需要继承 AbstractBaseUser 类
抛弃绝大部分字段的原因是
AbstractBaseUser中还有两个字段passwordlast_login。- -
AbstractBaseUser里面是使用 django user 时的一些必要方法例如:set_password,check_password,get_username等。
from django.contrib.auth.base_user import AbstractBaseUser
class Customer(AbstractBaseUser):
pass
不想创建 django auth 的表可以删除 django setting.py INSTALLED_APPS 中 django.contrib.auth。
但是还要删除 MIDDLEWARE 中关于身份验证的 django.contrib.auth.middleware.AuthenticationMiddleware 中间件。
- 要使用
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()
- 如果只是要替换 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












网友评论