java 构建 form 表单,二、表单Form对象的使用及构建复杂的QuerySet

一、利用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 %}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值