Django 官方文档的自定义身份认证部分有这样一句话:

If you’re starting a new project, it’s highly recommended to set up a custom user model, even if the default User model is sufficient for you.
如果您正在启动一个新项目,强烈建议设置一个自定义用户模型,即使默认的用户模型对您来说已经足够了。

如果是边开发边看文档,等读到这部分时,黄瓜菜都凉了。

项目文档编写自然有它的逻辑,不在文档最开始的时候提出这个建议也是为了不给新手造成困扰。换位思考,如果自己是初学者,连项目和应用的区别还没弄明白,文档入门一上来就告诉你先创建个自定义的用户应用,然后在模型里面继承某个抽象类定义个自定义用户模型,我一定马上把网页关掉。

新 Django 项目

创建好项目,各种配置先做好,配置自定义户用模型要在执行 ./manage.py migrate 迁移命令之前。

创建 User 应用

$ ./manage.py startapp users

创建自定义用户模型

编辑 users/models.py,创建自定义 User 类:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

编辑 users/admin.py,注册管理类:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User, UserAdmin)

编辑配置文件

base.py

# 添加 users 到应用列表
INSTALLED_APPS = [
    ...
    'users',
]

# 修改系统使用的用户模型
AUTH_USER_MODEL = 'users.User'

执行迁移

创建迁移文件

$ ./manage.py makemigrations

执行迁移

$ ./manage.py migrate