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 }}