使用Django来实现自定义用户模型
首先
使用Django设置自定义用户模型。
这篇文章是一个项目的一部分,该项目旨在在Docker上构建Django应用程序并将其部署到AWS Fargate。
使用自定义用户模型的原因
Django默认设置了用户模型。然而,在实际创建应用程序时,总会有需要根据自己创建的应用程序来修改用户模型的时候。由于在编码的过程中进行用户模型的修改是非常困难的,因此建议在项目的开始阶段就设置自定义用户模型。
关于自定义用户模型的实现
实现Custom User Model,可以使用「AbstractUser」类或「AbstractBaseUser」类。「AbstractUser」类是扩展默认用户字段和身份验证的简单方法,实现起来简单。「AbstractBaseUser」类的使用方法会增加编码量,但可以更精细地定制。
这次将使用”AbstractUser”进行实现。我在自己参与开发的项目中也使用”AbstractUser”来定制用户模型。如果只是进行一般的用户管理,”AbstractUser”就足够满足需求了。
准备
在使用Docker+Django和PostgreSQL创建的项目中,将实现自定义用户模型。
用户添加应用程序
首先,使用startapp命令创建名为users的自定义用户管理应用程序。然后,在setting.py中添加与自定义用户模型相关的代码。
docker-compose exec web python manage.py startapp users
让我们将在setting.py中创建的users添加进去。同时,在末尾添加一条说明,使用自定义用户模型替代默认用户模型。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Local
'users.apps.UsersConfig', #追加
]
...
AUTH_USER_MODEL = 'users.CustomUser' # 追加
向模型中添加CustomUser。
在models.py文件中创建CustomUser类。由于本次不对默认的用户模型进行字段的添加,所以在类中添加pass语句。如果要设置自定义字段,请在此处添加字段。
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
pass
创建自定义用户表单
请创建一个名为users/forms.py的文件,并添加以下代码。
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm):
model = get_user_model()
fields = ('email', 'username',)
class CustomUserChangeForm(UserChangeForm):
class Meta(UserChangeForm):
model = get_user_model()
fields = ('email', 'username',)
用户自定义管理的设置
在admin.py文件中添加以下代码。
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin
from .forms import CustomUserCreationForm, CustomUserChangeForm
CustomUser = get_user_model()
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = ['email', 'username',]
admin.site.register(CustomUser, CustomUserAdmin)
这样设置就完成了。最后我们来进行迁移。
docker-compose exec web python manage.py makemigrations users
docker-compose exec web python manage.py migrate