django中的newforms系统学习记录(一)

1.django的form系统现在包括oldforms,newforms,默认forms指向oldforms.
newforms中包含主要包含fields(Field类,类型集和表单框内容的校验规则)、forms(Form类)、models(从models转换为forms)、widgets(widget类,表单框的类型)、util(主要有ValidationError异常类),而__init__.py导入了newforms中的所有模块的所有属性。所以导入newforms系统时,一般只需
from django import newforms as forms
2.从django标准Form类继承,建立新form类,其中可能还用到Field和Widget类,
如果要自定义表单框内容的输入校验规则,只需要定义一个新方法clean_XXX来定义自己的校验规则;
大致格式例:
from django import newforms as forms

class bookforms(forms.Form):
    name=forms.CharField()
   
    def clean_name(self):
        name=self.clean_data.get('name','')
        if ...:
           raise forms.ValidationError('...')
        return name

form类实例对象(formobject)的is_valid()方法,可以判断表单输入内容是否通过验证;
clean_data属性和clean方法,得到一个字典对象,包含验证后的数据字典;
如果XXX验证不通过,那么XXX的错误信息将存储在formobject.XXX.errors或者formobject.errors.XXX
3.templates中调用实例对象的as_p,as_table,as_ul方法将生成表单,但是这样生成的表单显示将有一定局限性,如果既想使用newforms系统,又不想使用上述方法来自动生成表单,那么在templates中自定义的表单每个结构的名字都要和自建form类的属性名完全相同。这样,我们就可以继续使用newforms中的封装方法。