创建【Django】自定义用户
定制用户是什么? shì ?)
在Django中,自定义用户是指Web应用程序开发者独自创建的用户模型。虽然Django已经提供了标准的User模型,但官方并不推荐使用该模型。
通过定义自定义用户,可以创建标准的User模型中未定义的字段。
有关用户模型
以下是標準的User模型中提供的一些字段(部分)。
ユーザー名には英数字が含まれている場合がありますfirst_nameオプション(blank=True)。150 文字以下。last_nameオプション(blank=True)。150 文字以下。emailオプション(blank=True)。メールpassword必須。パスワードのハッシュとメタデータ。
在创建 web 应用程序时,如果想要定义更多字段作为用户信息,需要定义自定义用户模型。实际上,在创建应用程序时,定义自定义用户是必需的。如前所述,Django 官方也不推荐使用 User 模型,原因是一旦在 User 模型上进行了定义(迁移),就无法再定义自定义用户了。换句话说,即使想要添加希望用户字段扩展的项目,也无法进行更改。
参考链接:https://docs.djangoproject.com/en/4.2/ref/contrib/auth/
自定义用户创建方法
实际上,定义自定义用户有以下四个主要步骤。
-
- 自定义用户的定义
-
- 自定义用户的定制
-
- 将其应用为用户管理模型
- 在管理界面中管理自定义用户
1. 自定义用户的定义
首先,原本預先準備好的User模型是如何定義的呢?它是繼承自AbstractUser類別所定義的。換句話說,只要繼承AbstractUser並重新定義CustomUser,就能輕易地創建自訂用戶。這個AbstractUser不僅具有權限管理和驗證等功能,也能讓自訂用戶的認證變得簡單。
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
pass
我实际上创建了一个自定义用户。通过继承AbstractUser来完成,因此这种状态下的自定义用户实际上使用了User模型,与之没有什么不同。(然而,这样做可以使最初使用与User模型相同的功能,但之后可以进行定制。)
2. 客户定制用户的自定义
让我们为自定义用户添加所需的字段。由于继承了AbstractUser,因此无需再列出用户模型(User Model)上已经存在的字段,只需编写要添加的字段即可。在这个例子中,我们希望将身高和体重作为用户信息保留,所以决定定义weight和height字段。
from django.db import models
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
height = models.FloatField()
weight = models.FloatField()
REQUIRED_FIELDS = ["height", "weight"]
此外,在此处,我们以列表形式将已添加的字段赋值给REQUIRED_FIELDS。这是一种描述,用于在通过命令创建超级用户createsuperuser时指出必填字段的输入。
3.应用作为用户管理模型
之后我们将把用于认证的用户模型更改为自定义用户。
目前,User模型被用于认证的设置。因此,如果创建自定义用户并尝试创建用户,则认证将完全没有意义。
因此,让我们在settings.py文件中进行设置以使用认证模型。
AUTH_USER_MODEL = 'アプリ名.カスタムユーザーのModel名'
#今回だと
AUTH_USER_MODEL = 'アプリ名.CustomUser'
当达到这一步,可以通过执行makemigration→migrate来完成模型的定义。
用管理界面管理自定义用户
自定义用户的定义已经完成,并且已经在web应用程序中应用自定义用户进行用户创建,并设置了用于认证的模型。我以为一切都结束了,但是在这种情况下,自定义用户并没有应用到Django提供的管理界面中。(localhost:端口/admin页面)
为了在管理界面中应用自定义用户,需要在admin.py文件中添加以下描述。
from django.contrib import admin
from django.contrib.auth import get_user_model
CustomUser = get_user_model()
admin.site.register(CustomUser)
从上述内容中的自定义用户定义出发,进行了认证和管理所涉及的配置更改已经完成。
最后
因为在Django中创建Web应用程序时,创建自定义用户是必需的,所以我把它记在文章中,以防忘记。在自定义用户定义中,还可以定义和重写方法,这样可以使代码更易读!希望以后在Django中继续努力开发Web应用程序~~~