前言
Django 是一个非常受欢迎的 Python web 框架,自带的用户认证体系能帮助我们简单地实现注册、登录和权限控制等功能。然而如果需要实现更多的功能,比如自定义用户属性,或者实现不同的用户类型(如普通用户和管理员用户等),使用 Django 自带的 User 模型就可能会变得比较麻烦和受限。这时候,自定义用户模型就成为了一种很好的解决方案。
本篇博客将介绍如何在 Django 中创建自定义用户模型,并给出完整的代码示例。
快速上手
在实现自定义用户模型之前,需要注意以下几个问题:
- Django 自带的用户管理视图和模板中使用了 User 来创建表,如果需要自定义用户模型,需要在项目的 settings.py 文件中将 AUTH_USER_MODEL 配置项指向到新的模型。这样才能使用我们自定义的用户模型的所有属性和方法。
- 自定义用户模型需要继承 AbstractBaseUser 和 PermissionsMixin 模型,其中 AbstractBaseUser 模型定义了最基本的用户信息(用户名和密码),PermissionsMixin 模型主要是用来管理权限的。
- 自定义用户模型需要定义一个 Manager 类,用于管理和操作数据库。在 Manager 类中实现 create_user、create_superuser 等方法,用于创建普通用户和管理员用户。
- 自定义用户模型需要定义一个 Admin 类,用于管理后台管理页面,包括 fieldsets、list_display、list_filter、search_fields 等相关属性和方法。
下面是一个完整的自定义用户模型的示例代码:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
class MyUserManager(BaseUserManager):
def _create_user(self, email, password=None, **extra_fields):
if not email:
raise ValueError('The Email field must be set')
email = self.normalize_email(email)
user = self.m