Django 带有内置的用户身份验证系统。此配置执行最常见的项目需求,处理各种任务以及有效的密码和权限。我们可以通过导入用户认证模块来创建用户登录。本文将讨论用于创建新用户的UserCreationForm 。它是一个继承自ModelForm类的内置模块。在学习Django UserCreationForm之前,我们先简单介绍一下User。什么是用户对象?
用户对象是用户认证系统的主要组成部分。它们被表示为网站访问者,用于实现阻止访问、注册用户配置文件、将内容与创建者相关联等功能。但是“超级用户”和“管理员”类用户对象提供了特殊属性。专属福利
Django 用户创建表单
Django UserCreationForm 用于创建可以使用我们的 Web 应用程序的新用户。它具有三个字段:用户名、密码1和密码2(主要用于密码确认)。要使用 UserCreationForm,我们需要从django.contrib.auth.forms 导入它。from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render from django.contrib.auth.forms import UserCreationForm # Create your views here. def register(request): if request.POST == 'POST': form = UserCreationForm() if form.is_valid(): form.save() messages.success(request, 'Account created successfully') else: form = UserCreationForm() context = { 'form':form } return render(request, 'register.html', context)
现在我们将在Hello.url.py中创建路径来处理请求。from django.urls import path from django.contrib import admin from sampleapp.views import register
urlpatterns = [ path('admin/', admin.site.urls), path('register', register, name = 'register') ]
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <title>Register Page</title> </head> <body> {% block content %} <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script> {% endblock content %} </body> </html>
接下来,我们将通过扩展模板文件夹中的base.html文件来创建register.html文件。{% extends 'base.html' %} {% block content %} <div class = "login"> {% if messages %} <ul> {% for message in messages %} <li>{{ message }}</li> {% endfor %} </ul> {% endif %} <h1>Register Here - JavaTpoint Blog</h1> <form method="post" > {% csrf_token %} <table> {{ form.as_table }} <tr> <td></td> <td><input type="submit" name="submit" value="Register" /></td> </tr> </table> </form> </div> {% endblock content %}
当我们使用 http://127.0.0.1:8000/register/ 发送请求时,我们得到如下形式。
当我们单击“注册”按钮时,将生成 POST 请求并创建新用户。使用UserCreationForm()新创建的User会将is_superuser和is_staff设置为 False,但is_active设置为 True。UserCreationForm ()提供有限的字段。假设我们要发送验证邮件来验证用户;我们不能这样做,因为它没有电子邮件字段。为此,我们要么修改 UserCreationForm,包括电子邮件字段和验证工具,要么从头开始创建新的用户注册表单。我们将创建新的用户注册表单,因为它将提供对表单的完全控制。现在,我们将创建forms.py文件,并在示例应用程序的forms.py 文件中创建新类CustomUserCreationForm 。\python_project\Myfirstdjangoproject\Hello\sampleapp\forms.pyfrom django import forms from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm from django.core.exceptions import ValidationError from django.forms.fields import EmailField from django.forms.forms import Form class CustomUserCreationForm(UserCreationForm): username = forms.CharField(label='username', min_length=5, max_length=150) email = forms.EmailField(label='email') password1 = forms.CharField(label='password', widget=forms.PasswordInput) password2 = forms.CharField(label='Confirm password', widget=forms.PasswordInput) def username_clean(self): username = self.cleaned_data['username'].lower() new = User.objects.filter(username = username) if new.count(): raise ValidationError("User Already Exist") return username def email_clean(self): email = self.cleaned_data['email'].lower() new = User.objects.filter(email=email) if new.count(): raise ValidationError(" Email Already Exist") return email def clean_password2(self): password1 = self.cleaned_data['password1'] password2 = self.cleaned_data['password2'] if password1 and password2 and password1 != password2: raise ValidationError("Password don't match") return password2 def save(self, commit = True): user = User.objects.create_user( self.cleaned_data['username'], self.cleaned_data['email'], self.cleaned_data['password1'] ) return user
在上面的代码中,我们在CustomUserCreationForm中定义了四个字段:username、email、password1和password2。接下来,我们为每个字段定义单独的方法来清理数据。如果仔细观察,会发现密码 1 和密码 2 字段中都使用了小部件字段。小部件键参数允许更改字段的默认小部件。- username_clean ()将防止输入重复的用户名。
- email_clean ()将防止输入重复的电子邮件。
- clean_password2 ()方法将检查两个密码是否匹配
现在,我们更新views.py文件中的register()视图。from django.contrib.auth import forms from django.shortcuts import redirect, render from django.contrib import messages from django.contrib.auth.forms import UserCreationForm from .forms import CustomUserCreationForm # Create your views here. def register(request): if request.POST == 'POST': form = CustomUserCreationForm() if form.is_valid(): form.save() else: form = CustomUserCreationForm() context = { 'form':form } return render(request, 'register.html', context)

在这里,我们输入用户详细信息来创建新用户,我们得到以下输出。当您尝试使用相同的用户名创建用户时,它将显示一条消息 -具有该用户名的用户已存在。
我们还可以通过添加更多字段和功能来扩展此CustomeUserCreationForm,并且我们还可以使用form.ModelForm类。但在本教程中,我们使用了form.Form类。在接下来的教程中,我们将实现电子邮件验证属性,用户可以在其中接收邮件进行验证。要创建电子邮件验证工具,我们需要存储一些有关用户的附加数据,但在本教程中我们无法这样做。我们将完成即将推出的用户模型教程