首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python技术-django-forms使用总结

创建form类

from django import forms

class ContactForm(forms.Form):

subject = forms.CharField()

email = forms.EmailField(required=False)

message = forms.CharField()

使用form类

python manage.py shell

>>> from contact.forms import ContactForm

>>> f = ContactForm()

>>> print f

Subject:

Email:

Message:

默认输出按照HTML的格式,另外有一些其它格式的输出:

>>> print f.as_ul()

Subject:

Email:

Message:

>>> print f.as_p()

Subject:

Email:

Message:

请注意,标签、

、的开闭合标记没有包含于输出当中,这样你就可以添加额外的行或者自定义格式。

这些类方法只是一般情况下用于快捷显示完整表单的方法。 你同样可以用HTML显示个别字段:

>>> print f['subject']

>>> print f['message']

表单验证

>>> f = ContactForm({'subject': 'Hello', 'email': 'adrian@example.com', 'message': 'Nice site!'})

一旦你对一个Form实体赋值,你就得到了一个绑定form:

>>> f.is_bound

True

调用任何绑定form的is_valid()方法,就可以知道它的数据是否合法。

>>> f.is_valid()

True

>>> f = ContactForm({'subject': 'Hello'})>>> f.is_valid()

False

逐一查看每个字段的出错消息:

>>> f = ContactForm({'subject': 'Hello', 'message': ''})

>>> f['message'].errors

[u'This field is required.']

每一个邦定Form实体都有一个errors属性,它为你提供了一个字段与错误消息相映射的字典表。

>>> f = ContactForm({'subject': 'Hello', 'message': ''})

>>> f.errors

{'message': [u'This field is required.']}

最终,如果一个Form实体的数据是合法的,它就会有一个可用的cleaned_data属性。 这是一个包含干净的提交数据的字典。 Django的form框架不但校验数据,它还会把它们转换成相应的Python类型数据,这叫做清理数据。

>>> f = ContactForm({'subject': 'Hello', 'email': 'adrian@example.com', 'message': 'Nice site!'})

>>> f.is_valid()

True

>>> f.cleaned_data

{'message': 'uNice site!', 'email': 'uadrian@example.com', 'subject': 'uHello'}

改变字段显示

你可能首先注意到:当你在本地显示这个表单的时,message字段被显示成input type=”text” ,而它应该被显示成。我们可以通过设置widget 来修改它:

from django import forms

class ContactForm(forms.Form):

subject = forms.CharField()

email = forms.EmailField(required=False)

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

forms框架把每一个字段的显示逻辑分离到一组部件(widget)中。 每一个字段类型都拥有一个默认的部件,我们也可以容易地替换掉默认的部件,或者提供一个自定义的部件。

考虑一下Field类表现校验逻辑,而部件表现显示逻辑。

设置最大长度

一个最经常使用的校验要求是检查字段长度。 另外,我们应该改进ContactForm,使subject限制在100个字符以内。 为此,仅需为CharField提供max_length参数,像这样:

from django import forms

class ContactForm(forms.Form):

subject = forms.CharField(max_length=100)

email = forms.EmailField(required=False)

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

选项min_length参数同样可用。

设置初始值

让我们再改进一下这个表单:为字subject段添加* 初始值* : "I love your site!" (一点建议,但没坏处。)为此,我们可以在创建Form实体时,使用initial参数:

def contact(request):

if request.method == 'POST':

form = ContactForm(request.POST)

if form.is_valid():

cd = form.cleaned_data

send_mail(

cd['subject'],

cd['message'],

cd.get('email', `'noreply@example.com`_'),

[`'siteowner@example.com`_'],

)

return HttpResponseRedirect('/contact/thanks/')

else:

form = ContactForm(initial={'subject': 'I love your site!'})

return render_to_response('contact_form.html', {'form': form})

现在,subject字段将被那个句子填充。

请注意,传入* 初始值* 数据和传入数据以* 绑定* 表单是有区别的。 最大的区别是,如果仅传入* 初始值* 数据,表单是unbound的,那意味着它没有错误消息。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606A1KOQI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券