Django UserCreationForm| 创建新用户

17 Mar 2025 | 4 分钟阅读

Django 附带一个内置的用户身份验证系统。此配置执行项目最常见的需求,处理各种任务以及有效的密码和权限。

我们可以通过导入用户身份验证模块来创建用户登录。本文将讨论用于创建新用户的 UserCreationForm。它是一个内置模块,继承自 ModelForm 类。在学习 Django UserCreationForm 之前,让我们简要介绍一下 User

什么是 User 对象?

User 对象是用户身份验证系统的主要组成部分。它们表示为网站访问者,用于启用诸如阻止访问、注册用户配置文件、将内容与创建者关联等功能。但是 'superuser''admin' 类用户对象提供了特殊的属性。

User 对象由以下主要属性组成。

  • username
  • password
  • 电子邮件
  • first_name
  • last_name

实现 Django UserCreationForm

Django UserCreationForm 用于创建可以使用我们的 Web 应用程序的新用户。它有三个字段: username、password1password2(基本上用于密码确认)。

要使用 UserCreationForm,我们需要从 django.contrib.auth.forms 中导入它。

在这里,我们将创建视图来处理请求。

view.py 文件

现在我们将在 Helllo.url.py 中创建路径来处理请求。

template/base.html

接下来,我们将通过扩展模板文件夹中的 base.html 文件来创建 register.html 文件。

template/register.html

当我们使用 http://127.0.0.1:8000/register/ 发送请求时,我们得到如下形式的表单。

输出

Django UserCreationForm

当我们单击“注册”按钮时,将生成 POST 请求并创建新用户。使用 UserCreationForm() 新创建的 Useris_superuseris_staff 设置为 False,但将 is_active 设置为 True。

UserCreationForm() 提供了有限的字段。假设我们要发送验证邮件来验证用户;我们无法做到这一点,因为它没有 email 字段。

一个正确的用户注册表单应采取以下步骤。

  • 用户填写他们的详细信息并单击提交按钮。
  • 网站在提交的邮件上发送验证链接。
  • 用户在其输入的邮件上收到验证链接。

为此,我们可以修改 UserCreationForm,包括 email 字段和验证工具,或者从头开始创建一个新的用户注册表单。

我们将创建新的用户注册表单,因为它将提供对表单的完全控制。

现在,我们将创建 forms.py 文件 在 sampleapp 的 forms.py 文件中 创建新的类 CustomUserCreationForm

示例 -

\python_project\Myfirstdjangoproject\Hello\sampleapp\forms.py

在上面的代码中,我们在 CustomUserCreationForm 中定义了四个字段,分别是 username、email、password1 和 password2。接下来,我们为每个字段定义单独的方法来清除数据。如果仔细观察,widget 字段在 password1 和 password2 字段中都使用了。widget 键参数允许更改字段的默认 widget。

  • username_clean() 将阻止输入重复的用户名。
  • email_clean() 将阻止输入重复的电子邮件。
  • clean_password2() 方法将检查两个密码是否匹配

然后,save() 方法将保存数据。

现在,我们更新 views.py 文件中的 register() 视图。

输出

Django UserCreationForm

在这里,我们输入用户详细信息以创建新用户,我们得到以下输出。

Django UserCreationForm

当您尝试创建具有相同用户名的用户时,它将显示一条消息 - 已存在具有该用户名的用户。

Django UserCreationForm

我们还可以通过添加更多字段和功能来扩展此 CustomeUserCreationForm,我们还可以使用 form.ModelForm 类。但是在本教程中,我们使用了 form.Form 类。在接下来的教程中,我们将实现电子邮件验证属性,用户将收到邮件进行验证。要创建电子邮件验证工具,我们需要存储一些关于用户的其他数据,在本教程中,我们无法做到这一点。我们将在接下来的 User Model 教程中进行介绍。