📅  最后修改于: 2023-12-03 15:14:44.799000             🧑  作者: Mango
Django 是一个高效的 Python Web 框架,提供了非常完整的表单处理系统。
本文将介绍 Django 中的表单处理,其中包括了表单创建、数据验证、表单渲染等方面的内容。
在 Django 中,表单是由 HTML 表单、Django 视图函数和 Django 表单类三部分组成。
HTML 表单:是前端开发人员编写的一段 HTML 代码,用于收集用户的输入信息。Django 视图函数:是 Django 应用程序中一个视图函数,用于控制表单的提交行为。
Django 表单类:是一个 Python 类,它定义了表单的字段以及该字段的数据验证逻辑等信息。
我们可以通过下面这个示例代码,来了解如何创建一个 Django 表单类:
from django import forms
from django.core.validators import validate_email
class RegistrationForm(forms.Form):
username = forms.CharField(label='用户名', max_length=50)
email = forms.CharField(label='电子邮件', validators=[validate_email])
password = forms.CharField(label='密码', widget=forms.PasswordInput())
password_confirm = forms.CharField(label='确认密码', widget=forms.PasswordInput())
def clean(self):
cleaned_data = super(RegistrationForm, self).clean()
password = cleaned_data.get('password')
password_confirm = cleaned_data.get('password_confirm')
if password and password_confirm and password != password_confirm:
raise forms.ValidationError('两次输入的密码不匹配')
在这个示例代码中,我们创建了一个名为 RegistrationForm
的 Django 表单类,该类有四个字段 username
、email
、password
和 password_confirm
。
表单类中的每个字段都是一个框架提供的 FormField
对象,该对象表示了 HTML 表单中的一个字段和 Django 中的一组数据验证逻辑。
通过上述代码,我们已经定义好了表单类。现在需要将定义好的表单在 HTML 模板中渲染出来。
首先,在你的 Django 项目中创建一个名为 templates 的文件夹,然后在该文件夹中创建一个名为 registration.html 的文件,如下所示:
<html>
<head>
<title>Registration</title>
</head>
<body>
<h1>Registration</h1>
<form method="POST">
{% csrf_token %}
{{ form.username.label_tag }} {{ form.username }}
{{ form.email.label_tag }} {{ form.email }}
{{ form.password.label_tag }} {{ form.password }}
{{ form.password_confirm.label_tag }} {{ form.password_confirm }}
<button type="submit">Register</button>
</form>
</body>
</html>
在上述代码中,我们使用 Django 模板语言来渲染我们定义的表单类。Django 模板语言可以让我们在 HTML 中以一种更加可读可维护的方式使用 Python 代码。
另外需要注意的是,我们在表单中添加了一个 {% csrf_token %}
标签,该标签用于防止跨站请求伪造攻击。
现在我们已经将表单渲染出来了,接下来我们需要在 Django 视图函数中处理表单数据。
为了处理表单数据,我们需要编写一个名为 register
的视图函数,如下所示:
from django.shortcuts import render, redirect
from .forms import RegistrationForm
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
return redirect('successful')
else:
form = RegistrationForm()
return render(request, 'registration.html', {'form': form})
在上述代码中,我们编写了一个名为 register
的视图函数,该函数根据请求方法的不同处理不同的逻辑。
当请求方法为 GET 时,我们返回一个新的 RegistrationForm 实例;当请求方法为 POST 时,我们从请求参数中取出表单数据,并通过 is_valid
方法验证表单数据是否合法。
如果表单数据验证通过,则重定向到成功页面。否则,我们将表单对象返回到模板中,以便在模板中呈现错误信息。
本文简要介绍了 Django 的表单处理,包括了表单的创建、数据验证、表单渲染等方面的内容。我们相信您通过本文学到了基本的 Django 表单处理知识,可以在日常开发中灵活使用 Django 表单处理。