您的位置:首页 > 编程语言 > Python开发

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'





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: