使用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
广告
将在 10 秒后关闭
bannerAds