python实现简单表单校验框架
2015-05-30 00:10
435 查看
#encoding=utf-8 fromapp.modelsimportStudent fromflaskimportg importre fromflask.ext.wtfimportForm fromwtformsimportStringField,RadioField,PasswordField,TextAreaField,BooleanField,DateField,ValidationError,\ IntegerField fromwtforms.validatorsimportDataRequired,Length,Regexp,Email,EqualTo fromwtforms.widgetsimportListWidget,HTMLString classBSListWidget(ListWidget): def__call__(self,field,**kwargs): kwargs.setdefault('id',field.id) html="" forsubfieldinfield: html+=u'<labelclass="radio-inline">%s%s</label>'%(subfield(),subfield.label.text) returnHTMLString(html) classFields(object): notnull=u'该项输入不能为空' defget_len_str(min=None,max=None): ifminandnotmax: returnu"该项输入的最小长度必须是%d"%min elifmaxandnotmin: returnu"该项输入的最大长度必须是%d"%max else: returnu'该输入的长度必须大于%d,小于%d'%(min,max) username=StringField(label=u'请输入您的用户名', validators=[DataRequired(message=notnull), Length(min=0,max=15,message=get_len_str(0,16)), ]) password=PasswordField(label=u'请输入密码',description=u'请输入密码', validators=[DataRequired(message=notnull), Length(min=0,max=60,message=get_len_str(min=0,max=61)), ]) confirm_password=PasswordField(label=u'请确认密码', description=u'请确认密码', validators=[DataRequired(message=notnull), Length(min=5,max=60,message=get_len_str(min=4,max=61)), EqualTo(u'confirm_password',message=u'两次输入的密码不一致'),] ) student_amount=StringField(label=u'请输入您指导的学生数量', validators=[Regexp(re.compile(r"\d"))]) is_active=RadioField(label=u'是否激活账户', coerce=int, choices=[(0,u'否'),(1,u'是')], default=0, widget=BSListWidget()) notice=TextAreaField(label=u'请填写对学生的通知') attachment=StringField(label=u'添加附加', validators=[Length(min=0,max=32,message=get_len_str(min=0,max=33))],) is_comment_teacher=RadioField(label=u'是否有评价功能', coerce=int, choices=[(0,u'否'),(1,u'是')], default=0, widget=BSListWidget()) student_name=StringField(label=u'请输入您的姓名', description='', validators=[DataRequired(message=notnull), Length(min=0,max=15,message=get_len_str(0,16)), ]) sex=RadioField(label=u'您的性别', coerce=int, choices=[(0,u'男'),(1,u'女')], default=0, widget=BSListWidget()) user_type=RadioField(label=u'您是', coerce=str, choices=[(u'student',u'学生'),(u'teacher',u'老师'),(u'admin',u'管理员')], default=u'student', widget=BSListWidget()) mark=StringField(label=u'您的分数', default=0, validators=[DataRequired(message=notnull), Length(min=0,max=100,message=get_len_str(0,101)), ]) comment=TextAreaField(label=u'请填写您对学生的评语', validators=[ Length(min=0,max=128,message=get_len_str(0,129)), ]) title=StringField(label=u'请填写毕业设计的题目', validators=[ Length(min=0,max=128,message=get_len_str(0,129)), ]) description=TextAreaField(label=u'请填写毕业设计的描述') task_start_date=DateField(label=u'开始时间') task_end_date=DateField(label=u'结束时间') comment_start_date=DateField(label=u'开始时间') comment_end_date=DateField(label=u'结束时间') classLoginForm(Form): username=Fields.username password=Fields.password user_type=Fields.user_type remember_me=BooleanField(label=u'记住我',default=u'y') errors={} defvalidate_fields(self): status=True status=statusandself.username.validate(self) status=statusandself.username.validate(self) self.password.validate() #defvalidate(self): self._fields self.validate_on_submit() returnself.username.validate(self) #defvalidate_username(self,field): #user=Student.get_user(field.data) #ifnotuser: #print'notuser' #self.errors['username']=u'用户名不存在' #raiseValidationError(message=u'该用户名已被注册') #else: #print'user' #returnTrue # #defvalidate_password(self,field): #ifg.user: #iffield.data!=g.user.username: #field.errors.append(message=u'用户密码不正确') #returnFalse # #defvalidate_user_type(self,field): #printfield.data # #defvalidate_remember_me(self,field): #iffield.data: #printfield.data classStuInfo(Form): username=Fields.username student_name=Fields.student_name sex=Fields.sex attachment=Fields.attachment mark=Fields.mark comment=Fields.comment classBaseForm(object): def__init__(self,form): self.username=Field(label=u'用户名',type='text',validators={'min_length':5}) forfield_name,datainform.items(): getattr(self,field_name).data=data defvalidate(self): status=True forfield_nameinself.__dict__: status=statusandgetattr(self,field_name).validate() returnstatus classField(object): def__init__(self,label=None,type='text',validators={},description=None,data=''): self.data=data self.label=label self.type=type self.validators=validators self.description=description defvalidate(self): status=True formethod_name,paraminself.validators.items(): printmethod_name,param status=statusandgetattr(self,method_name)(param) returnstatus defis_null(self,status): ifstatus: returnTrue ifnotself.data: returnFalse ifhasattr(self.data,'replace')andlen(self.data.replace('',''))>0: returnFalse iflen(self.data)==0: returnFalse returnTrue defmin_length(self,min=-1): ifnotself.is_null(False)andlen(self.data)<min: returnFalse returnTrue defmax_length(self,max): ifnotself.is_null(False)andlen(self.data)>max: returnFalse returnTrue defmin(self,min): try: ifint(self.data)<min: returnFalse returnTrue exceptException,e: printe returnFalse defmax(self,max): try: ifint(self.data)>max: returnFalse returnTrue exceptException,e: printe returnFalse defequal_to(self,data): ifself.data!=data: returnFalse returnTrue defselect_from(self,*args): ifself.datanotinargs: returnFalse returnTrue if__name__=='__main__': b=BaseForm({'username':'o'}) printb.validate() print'ok'
相关文章推荐
- 使用url_helper简化Python中Django框架的url配置教程
- 在Python的Django框架下使用django-tagging的教程
- 使用Python的Django框架中的压缩组件Django Compressor
- 利用python建表
- python连接mysql
- python中文字符串前加u
- Fields in python
- python 中keyword argument和non-key argument
- [Python]项目打包:5步将py文件打包成exe文件
- 以Python Imaging Library 进行影像资料处理PIL
- Python正则表达式教程
- python的lambda表达式、filter函数、map函数
- Python文件关闭机制详解
- Eclipse配置Python环境
- Python中def的用法
- 一句话python概念理解
- 从底层理解Python的执行
- python socket通讯
- Python基础:01Python标准类型分类
- python模拟登录前程无忧,发送简历