1:新建form.py文件,
from django import forms
class SaishiForm(forms.Form):
name = forms.CharField(max_length = 100, label = u'单位名称',error_messages={'required': '请输入您的单位名称'})
people = forms.CharField(max_length = 10, label = u'联系人',error_messages={'required': '请填写联系人'})2:在views中添加如下(该方法还是需要在url中配置)
def myselfcontest(request, form_class=SaishiForm):
# 获取当前组委会信息
if request.method == 'POST': # 如果表单被提交
form = form_class(request.POST,request.FILES) # 获取Post表单数据
if form.is_valid(): # 验证表单
return HttpResponseRedirect('/') # 跳转
else:
form = form_class() #获得表单对象
return render_to_response( 'index.html', {
'form': form,
},context_instance=RequestContext(request))3:模板中:
处理带有FileField 和ImageField 字段的表单比普通的表单要稍微复杂一点。
首先,为了上传文件,你需要确保你的<form> 元素正确定义enctype 为"multipart/form-data":
<form action="." method="post" enctype="multipart/form-data" class="am-form">
<table class="am-table am-table-bordered" style="font-size: 14px;">
<tr>
<td width="20%" align="center">单位名称<p style="color:red;">{{form.name.errors.as_text}}</p></td>
<td width="80%">{{form.name}}</td>
</tr>
</table>
</form>4:自定义验证
def clean(self):
if self._errors:
return
account = self.cleaned_data['account']
reaccount = self.cleaned_data['reaccount']
if account != reaccount:
raise forms.ValidationError('两次密码输入不一致')
if not XMembers.objects.filter(phone = account):
raise forms.ValidationError('账号错误')
return self.cleaned_data
模板中加载forms.ValidationError需要用到唯一字段{{ form.non_field_errors }}