Django 构建模板form表单的两种方法

1. Introduction

Django 是一个强大的 Python Web 框架,它帮助开发者快速构建 Web 应用。在 Django 中,应用由多个组件构成,其中之一是模板。模板是一种可以生成 HTML 内容的文本文件,通常包含 HTML 和模板语言。表单是 Web 应用程序中最常见的交互元素之一。在本文中,我们将介绍 Django 中两种用于构建表单的模板方法。

2. Method 1: Using Django Forms

Django 带有一个表单系统,可以自动生成表单并验证用户输入。此系统允许开发者通过定义表单类来定义表单。在这个类中,你可以为每个字段指定默认值、验证规则和表单类型。下面我们将详细介绍第一种使用 Django 表单构建模板的方法。

2.1 定义表单类

首先,我们需要定义一个表单类。可以在 forms.py 文件中定义该类。可以选择使用多种字段类型,例如 CharField、BooleanField 或 DateTimeField。

from django import forms

class ContactForm(forms.Form):

name = forms.CharField(max_length=50)

email = forms.EmailField()

message = forms.CharField(widget=forms.Textarea)

上面的代码定义了一个 ContactForm 类,该类具有三个字段:一个 CharField 类型、一个 EmailField 类型和一个多行文本输入框。我们使用 max_length 参数指定对于 name 字段最大长度为 50 个字符,在 email 字段中使用了 EmailField 类型来验证 email,最后使用 widget=forms.Textarea 参数指定了 message 字段的 HTML 表单元素类型为多行文本输入框。

2.2 在模板中使用表单类

在定义完表单类后,接下来需要在模板中使用它。首先,在主模板中引用我们刚刚创建的表单类。然后,使用 form.as_pform.as_tableform.as_ul 渲染表单。

{% extends "base.html" %}

{% block content %}

{% if form.errors %}

<p style="color: red;">Please correct the error(s) below.</p>

{% endif %}

<form action="" method="post">

{% csrf_token %}

{{ form.as_p }}

<input type="submit" name="submit" value="Send" />

</form>

{% endblock %}

上面的代码显示了一个基本的表单模板。要渲染表单,我们使用了 {{ form.as_p }} 模版标签。在使用表单时,我们使用的最重要的标签是 {% csrf_token %} 标签。这是一个 Django 内置模板标签,用于保护你的表单免受 CSRF 攻击。在上面的代码中,我们也使用了它。

2.3 处理表单提交

当用户提交表单时,我们需要处理表单并执行某些操作。在 Django 中,处理表单的常见方式是编写视图。在最简单的情况下,视图只需确定表单是否合法,并在成功保存时将用户重定向到其他页面。下面是一个基本视图的示例代码。

from django.shortcuts import render, redirect

from .forms import ContactForm

def contact(request):

if request.method == 'POST':

form = ContactForm(request.POST)

if form.is_valid():

name = form.cleaned_data['name']

email = form.cleaned_data['email']

message = form.cleaned_data['message']

form.save()

return redirect('thank_you')

else:

form = ContactForm()

return render(request, 'contact.html', {'form': form})

3. Method 2: Using HTML and Django Template Tags

第二种方法使用 HTML 和 Django 模板标签构建表单。使用这种方法可以更好地控制表单的 HTML 输出。我们可以使用与 Method 1 中相同的表单类。需要注意的是,在使用此方法时,我们需要手动验证表单输入。

3.1 在模板中构建表单

首先,在 HTML 模板中使用 <form> 元素构建表单。使用 <input> 元素为每个字段创建输入元素,同时使用 Django 模板标签添加每个字段的 label 和错误消息。下面是一个例子。

{% extends "base.html" %}

{% block content %}

{% if form.errors %}

<p style="color: red;">Please correct the error(s) below.</p>

{% endif %}

<form action="" method="post">

{% csrf_token %}

<div>

<label for="id_name">Name:</label>

{{ form.name }}

{% if form.name.errors %}

<p style="color: red;">{{ form.name.errors }}</p>

{% endif %}

<br />

</div>

<div>

<label for="id_email">Email:</label>

{{ form.email }}

{% if form.email.errors %}

<p style="color: red;">{{ form.email.errors }}</p>

{% endif %}

<br />

</div>

<div>

<label for="id_message">Message:</label>

{{ form.message }}

{% if form.message.errors %}

<p style="color: red;">{{ form.message.errors }}</p>

{% endif %}

<br />

</div>

<input type="submit" name="submit" value="Send" />

</form>

{% endblock %}

上面的代码使用了模板标记来向 HTML 表单元素中添加 label 和错误消息。这些标签非常有用,因为它们向用户指出了表单字段的用途,并在用户做出错误时提供有用的反馈。

3.2 处理表单提交

在第二种方法中,我们需要在处理表单提交时手动验证表单。

from django.shortcuts import render, redirect

from .forms import ContactForm

def contact(request):

if request.method == 'POST':

form = ContactForm(request.POST)

if form.is_valid():

name = request.POST.get('name')

email = request.POST.get('email')

message = request.POST.get('message')

if name and email and message:

form.save()

return redirect('thank_you')

else:

error_message = 'Please fill in all the fields!'

else:

error_message = 'Invalid data entered.'

else:

form = ContactForm()

return render(request, 'contact.html', {'form': form, 'error_message': error_message})

将表单数据保存到数据库之前,我们需要使用适当的验证方法来验证 HTML 表单数据。如果表单数据无效,则返回错误消息并允许用户重新输入。如果数据有效,则将数据保存到数据库中。

4. Conclusion

本文介绍了 Django 中两种用于构建表单的方法。使用 Django 表单是构建表单的最佳实践,因为 Django 的表单系统可以自动验证用户输入并生成所有必要的 HTML。使用基于 HTML 的模板方法需要使用户手动验证表单数据,这可能不是所有开发者都喜欢的方法。使用哪种方法取决于开发者的个人喜好和项目需求。无论您选择的方法是什么,Django 都提供了在 Web 应用程序中添加表单的工具。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签