一、利用Django创建表单
Django包含两个基类可构建表单,如下所示:
Form 可构建标准的表单
ModelForm 可构建与模型实例相关联的表单
1. 标准表单Form
首先 在应用程序目录中创建 forms.py 文件,代码如下:
from django import forms
class EmailPostForm(forms.Form):
name = forms.CharField(max_length=25)
email = forms.EmailField()
to = forms.EmailField()
comments = forms.CharField(required=False, widget=forms.Textarea)
CharField 该字段类型显示为
widget 为字段所使用的插件,在 comments 字段中使用了 Textarea 插件
EmailField 需要使用有效的电子邮件地址;否则,字段验证将抛出 forms.ValidationError 异常
required 表示该字段是否必填项
有效的表单字段列表请参照:点击此处
接下来 在 views.py 中使用 Form 表单对象
from .forms import EmailPostForm
def post_share(request, post_id):
post = get_object_or_404(Post, id=post_id, status='published')
if request.method == 'POST':
form = EmailPostForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
# ...
else:
form = EmailPostForm()
return render(request, 'blog/post/share.html', {'post': post, 'form': form})
上述视图工作方式如下:
定义了 post_share 视图,并接收 request 对象和 post_id 变量作为参数
采用 get_object_or_404 快捷方式,并通过 ID 检索帖子,以确保检索的状态为 published
根据 request.method == 'POST' 方法区分 POST 请求还是 GET 请求
表单处理流程如下:
当视图为 GET 请求时,创建一个新的 form 实例,并用于显示模板中的空表单: form = EmailPostForm()
当为 POST 请求时,通过包含于 request.POST 中的提交数据生成一个表单实例:form = EmailPostForm(request.POST)
利用表单 is_valid() 方法验证所提交的数据。如果作一字段包含了无效数据,将返回 False。通过访问 form.errors 可查看验证错误列表
若表单正确,通过访问 form.cleaned_data 将对验证后的数据进行检索。该属性表示为表单字段及其对应值的字典。
最后 在视图中使用 Form 对象:
{% extends "blog/base.html" %}
{% block title %}Share a post{% endblock %}
{% block content %}
{% if sent %}
E-mail successfully sent
"{{ post.title }}" was successfully sent to {{ form.cleaned_data.to }}.
{% else %}
Share "{{ post.title }}" by e-mail
{{ form.as_p }}
{% csrf_token %}
{% endif %}
{% endblock %}
此处通知Django利用 as_p 方法将字段显示为
中的字段。除此之外,还可利用 as_ul 作为无序列表显示表单;或者利用 as_table 作为表予以显示。如果需要显示每个字段,可遍历相关字段,如下所示:
{% for field in form%}
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% endfor %}