让每一名学员高薪就业(forms.Form):subject=forms.CharField()email=forms.EmailField(required=False)message=forms.CharField()使用form类pythonmanage.pyshellfromcontact.formsimportContactFormf=ContactForm()printftrthlabelfor=id_subjectSubject:/label/thtdinputtype=textname=subjectid=id_subject//td/trtrthlabelfor=id_emailEmail:/label/thtdinputtype=textname=emailid=id_email//td/trtrthlabelfor=id_messageMessage:/label/thtdinputtype=textname=messageid=id_message默认输出按照HTML的table格式,另外有一些其它格式的输出:printf.as_ul()让每一名学员高薪就业=id_subjectSubject:/labelinputtype=textname=subjectid=id_subject//lililabelfor=id_emailEmail:/labelinputtype=textname=emailid=id_email//lililabelfor=id_messageMessage:/labelinputtype=textname=messageid=id_message//liprintf.as_p()plabelfor=id_subjectSubject:/labelinputtype=textname=subjectid=id_subject//pplabelfor=id_emailEmail:/labelinputtype=textname=emailid=id_email//pplabelfor=id_messageMessage:/labelinputtype=textname=messageid=id_message//p请注意,标签table、ul、form的开闭合标记没有包含于输出当中,这样你就可以添加额外的行或者自定义格式。这些类方法只是一般情况下用于快捷显示完整表单的方法。你同样可以用HTML显示个别字段:printf['subject']inputtype=textname=subjectid=id_subject/printf['message']inputtype=textname=messageid=id_message/让每一名学员高薪就业=ContactForm({'subject':'Hello','email':'adrian@example.com','message':'Nicesite!'})一旦你对一个Form实体赋值,你就得到了一个绑定form:f.is_boundTrue调用任何绑定form的is_valid()方法,就可以知道它的数据是否合法。f.is_valid()Truef=ContactForm({'subject':'Hello'})f.is_valid()False逐一查看每个字段的出错消息:f=ContactForm({'subject':'Hello','message':''})f['message'].errors[u'Thisfieldisrequired.']每一个邦定Form实体都有一个errors属性,它为你提供了一个字段与错误消息相映射的字典表。f=ContactForm({'subject':'Hello','message':''})f.errors{'message':[u'Thisfieldisrequired.']}让每一名学员高薪就业最终,如果一个Form实体的数据是合法的,它就会有一个可用的cleaned_data属性。这是一个包含干净的提交数据的字典。Django的form框架不但校验数据,它还会把它们转换成相应的Python类型数据,这叫做清理数据。f=ContactForm({'subject':'Hello','email':'adrian@example.com','message':'Nicesite!'})f.is_valid()Truef.cleaned_data{'message':'uNicesite!','email':'uadrian@example.com','subject':'uHello'}改变字段显示你可能首先注意到:当你在本地显示这个表单的时,message字段被显示成inputtype=”text”,而它应该被显示成textarea。我们可以通过设置widget来修改它:fromdjangoimportformsclassContactForm(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参数,像这样:fromdjangoimportformsclassContactForm(forms.Form):subject=forms.CharField(max_length=100)email=forms.EmailField(required=False)message=forms.CharField(widget=forms.Textarea)选项min_length参数同样可用。设置初始值让我们再改进一下这个表单:为字subject段添加*初始值*:Iloveyoursite!(一点建议,但没坏处。)为此,我们可以在创建Form实体时,使用initial参数:defcontact(request):ifrequest.method=='POST':form=ContactForm(request.POST)ifform.is_valid():cd=form.cleaned_datasend_mail(让每一名学员高薪就业['subject'],cd['message'],cd.get('email',`'noreply@example.com`_'),[`'siteowner@example.com`_'],)returnHttpResponseRedirect('/contact/thanks/')else:form=ContactForm(initial={'subject':'Iloveyoursite!'})returnrender_to_response('contact_form.html',{'form':form})现在,subject字段将被那个句子填充。请注意,传入*初始值*数据和传入数据以*绑定*表单是有区别的。最大的区别是,如果仅传入*初始值*数据,表单是unbound的,那意味着它没有错误消息。