Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42308
  • 博文数量: 10
  • 博客积分: 1420
  • 博客等级: 上尉
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-22 15:28
文章分类

全部博文(10)

文章存档

2009年(3)

2008年(7)

我的朋友

分类: Python/Ruby

2008-08-23 20:34:17

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中的封装方法。
 
阅读(1215) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~