@bergus
2015-12-02T06:33:04.000000Z
字数 5118
阅读 1895
python flask wtf
# encoding=utf-8from app.models import Studentfrom flask import gimport refrom flask.ext.wtf import Formfrom wtforms import StringField, RadioField, PasswordField, TextAreaField, BooleanField, DateField, ValidationError, \IntegerFieldfrom wtforms.validators import DataRequired, Length, Regexp, Email, EqualTofrom wtforms.widgets import ListWidget, HTMLStringclass BSListWidget(ListWidget):def __call__(self, field, **kwargs):kwargs.setdefault('id', field.id)html = ""for subfield in field:html += u'<label class="radio-inline"> %s%s </label>' % (subfield(), subfield.label.text)return HTMLString(html)class Fields(object):notnull = u'该项输入不能为空'def get_len_str(min=None, max=None):if min and not max:return u"该项输入的最小长度必须是%d" % minelif max and not min:return u"该项输入的最大长度必须是%d" % maxelse:return u'该输入的长度必须大于%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'结束时间')class LoginForm(Form):username = Fields.usernamepassword = Fields.passworduser_type = Fields.user_typeremember_me = BooleanField(label=u'记住我', default=u'y')errors = {}def validate_fields(self):status = Truestatus = status and self.username.validate(self)status = status and self.username.validate(self)self.password.validate()# def validate(self):self._fieldsself.validate_on_submit()return self.username.validate(self)# def validate_username(self, field):# user = Student.get_user(field.data)# if not user:# print 'not user'# self.errors['username'] = u'用户名不存在'# raise ValidationError(message=u'该用户名已被注册')# else:# print 'user'# return True## def validate_password(self,field):# if g.user:# if field.data != g.user.username:# field.errors.append(message=u'用户密码不正确')# return False## def validate_user_type(self, field):# print field.data## def validate_remember_me(self,field):# if field.data:# print field.dataclass StuInfo(Form):username = Fields.usernamestudent_name = Fields.student_namesex = Fields.sexattachment = Fields.attachmentmark = Fields.markcomment = Fields.commentclass BaseForm(object):def __init__(self, form):self.username = Field(label=u'用户名', type='text', validators={'min_length': 5})for field_name, data in form.items():getattr(self, field_name).data = datadef validate(self):status = Truefor field_name in self.__dict__:status = status and getattr(self, field_name).validate()return statusclass Field(object):def __init__(self, label=None, type='text', validators={}, description=None, data=''):self.data = dataself.label = labelself.type = typeself.validators = validatorsself.description = descriptiondef validate(self):status = Truefor method_name, param in self.validators.items():print method_name, paramstatus = status and getattr(self, method_name)(param)return statusdef is_null(self, status):if status:return Trueif not self.data:return Falseif hasattr(self.data, 'replace') and len(self.data.replace(' ', '')) > 0:return Falseif len(self.data) == 0:return Falsereturn Truedef min_length(self, min=-1):if not self.is_null(False) and len(self.data) < min:return Falsereturn Truedef max_length(self, max):if not self.is_null(False) and len(self.data) > max:return Falsereturn Truedef min(self, min):try:if int(self.data) < min:return Falsereturn Trueexcept Exception, e:print ereturn Falsedef max(self, max):try:if int(self.data) > max:return Falsereturn Trueexcept Exception, e:print ereturn Falsedef equal_to(self, data):if self.data != data:return Falsereturn Truedef select_from(self, *args):if self.data not in args:return Falsereturn Trueif __name__ == '__main__':b = BaseForm({'username': 'o'})print b.validate()print 'ok'
