📜  Django-表单处理(1)

📅  最后修改于: 2023-12-03 15:14:44.799000             🧑  作者: Mango

Django 表单处理

Django 是一个高效的 Python Web 框架,提供了非常完整的表单处理系统。

本文将介绍 Django 中的表单处理,其中包括了表单创建、数据验证、表单渲染等方面的内容。

Django 表单的基本概念

在 Django 中,表单是由 HTML 表单、Django 视图函数和 Django 表单类三部分组成。

HTML 表单:是前端开发人员编写的一段 HTML 代码,用于收集用户的输入信息。Django 视图函数:是 Django 应用程序中一个视图函数,用于控制表单的提交行为。

Django 表单类:是一个 Python 类,它定义了表单的字段以及该字段的数据验证逻辑等信息。

创建 Django 表单类

我们可以通过下面这个示例代码,来了解如何创建一个 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 表单类,该类有四个字段 usernameemailpasswordpassword_confirm

表单类中的每个字段都是一个框架提供的 FormField 对象,该对象表示了 HTML 表单中的一个字段和 Django 中的一组数据验证逻辑。

渲染 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 表单处理。