class ArticleForm(BaseForm): handlemod = core.RadioField(label='选择操作类型', choices=( (1, '恢复链接'), (2, '删除链接'), ), validators=[DataRequired()], coerce=int) urls = simple.StringField( label="链接地址", validators=[DataRequired()], ) remark = simple.StringField(label="备注", ) relation = core.RadioField(label='是否关联3g网及分页', choices=( (1, '关联'), (2, '不关联'), ), validators=[DataRequired()], coerce=int) username = simple.StringField(label='用户名', validators=[DataRequired()]) def validate_urls(self, field): try: for url in field.data.split(): if not re.match('^http://', url): raise ParameterException(url + '链接地址请以http://开头') parse = urlparse(url) if not re.search("test.com$", parse.netloc): raise ParameterException(msg="只接收test.com域名下的链接") except: raise ParameterException("urls参数格式错误" + traceback.format_exc())
class WebUrlForm(BaseForm): handlemod = core.RadioField(label='选择操作类型', choices=( (1, '恢复链接'), (2, '删除链接'), ), validators=[DataRequired()], coerce=int) weburls = simple.StringField( label="链接地址", widget=widgets.TextArea(), render_kw={ "placeholder": "输入页面url地址以换行分隔", "rows": 10, 'class': 'form-control' }, validators=[DataRequired()], ) imagexpath = simple.StringField(label="获取图片的xpath规则", widget=widgets.TextInput(), render_kw={ "placeholder": "爬取图片的xpath规则,不懂可以不填", "value": "//center//img/@src", 'class': 'form-control' }) pages = BooleanField(label="是否关联分页") remark = simple.StringField(label="备注", widget=widgets.TextInput(), render_kw={ "placeholder": "本次操作说明,可不填写。", 'class': 'form-control' })
class RegForm(Form): username = simple.StringField( label="用户名", validators=[ validators.DataRequired(message="用户名不能为空"), validators.Length(min=6, max=16, message="用户名必须大于等于6,小于等于16") ], render_kw={"class": "my_class"}) password = simple.PasswordField( label="密码", validators=[ validators.DataRequired(message="密码不能为空"), validators.Length(min=6, max=16, message="密码必须大于等于6,小于等于16") ]) repassword = simple.PasswordField( label="确认密码", validators=[ validators.DataRequired(message="确认密码不能为空"), validators.EqualTo("password", message="两次密码不一致") ]) # widget=widgets.RadioInput(), gender = core.RadioField(label="性别", choices=((0, "女"), (1, "男")), default=1, render_kw={"class": "my_class"}, coerce=int) email = simple.StringField(label="邮箱", validators=[ validators.DataRequired(message="邮箱不能为空"), validators.Email(message="不符合规定") ])
class RegForm(Form): username = simple.StringField(label="用户名:", validators=[ validators.Length( min=4, max=10, message="用户名不能小于%(min)d,不能大于%(max)d") ]) password = simple.PasswordField( label="密码:", validators=[ validators.Length(max=10, min=6, message="password不能小于%(min)d,不能大于%(max)d") ]) repassword = simple.PasswordField( label="确认眼神:", validators=[validators.EqualTo("password", message="眼神未确认")]) email = simple.StringField(label="邮箱", validators=[validators.Email(message="邮箱格式不符")]) gender = core.RadioField(label="性别:", choices=[(1, "女"), (2, "男")], coerce=int) hobby = core.SelectMultipleField(label="嗜好", choices=[(1, "小姐姐"), (2, "小萝莉"), (3, "小正太"), (4, "小哥哥")], coerce=int) sub = simple.SubmitField(label="登陆", render_kw={"class": "bs"})
class RecoverForms(BaseForm): handlemod = core.RadioField(label='选择操作类型', choices=( (1, '恢复链接'), (2, '删除链接'), ), validators=[DataRequired()], coerce=int) fileupload = simple.StringField( label="上传列表文件", widget=widgets.FileInput(), render_kw={'placeholder': 'form-control'}, ) imageurls = simple.StringField(label="链接地址", widget=widgets.TextArea(), render_kw={ "placeholder": "输入链接url地址以换行分隔", "rows": 10, 'class': 'form-control' }) remark = simple.StringField(label="备注", widget=widgets.TextInput(), render_kw={ "placeholder": "本次操作说明,可不填写。", 'class': 'form-control' }) addwhiteimg = core.RadioField( label='图片是否加入图片白名单', choices=((0, '加入'), (1, '不加入')), default=1, validators=[DataRequired()], coerce=int, ) relation = core.RadioField( label='是否关联3g网及分页', choices=( (1, '关联'), (2, '不关联'), ), validators=[DataRequired()], coerce=int, default=2, )
class RegisterForm(Form): name = simple.StringField( label='用户名', validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, default='alex' ) pwd = simple.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空') ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'} ) pwd_confirm = simple.PasswordField( label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空'), validators.EqualTo('pwd', message='两次密码输入不一致'), ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'} ) email = html5.EmailField( label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'from-control'}, ) gender = core.RadioField( label='性别', choices=( (1, '男'), (2, '女'), ), coerce=int, default=[1, ], )
class RegForm(Form): # 用户名 username = simple.StringField( label='用户名', # label标签 validators=[ # 校验规则 validators.data_required(message='数据不能为空'), validators.Length(min=5, max=16, message="用户名要在5-6个字符之间") ], render_kw={"class": 'user'} # input标签中的类 ) # 密码 pwd = simple.PasswordField( label='密码', # label标签 validators=[ # 校验规则 validators.data_required(message='数据不能为空'), validators.Length(min=5, max=16, message="用户名要在5-6个字符之间"), validators.Regexp( regex='^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{6,}$', message='最少6位,包括至少1个大写字母,1个小写字母,1个数字,不允许包含特殊字符') ], render_kw={"class": 'pwd'} # input标签中的类 ) # 确认密码 repwd = simple.PasswordField( label='密码', # label标签 validators=[ # 校验规则 validators.data_required(message='数据不能为空'), validators.EqualTo('pwd', message='两次密码不一致') ], render_kw={"class": 'repwd'} # input标签中的类 ) # 单选 gender = core.RadioField( label='性别', choices=((1, '女'), (2, '男')), coerce=int, # 选择字符串转化为int 默认为str default=2 # 默认选中 ) # 多选 hobby = core.SelectMultipleField( label='爱好', choices=[ [1, '西游记'], [2, '红楼梦'], ], coerce=int, default=[1, 2] # 默认 )
class MutationsMrnaForm(FlaskForm): mrna_radio = core.RadioField( label="mRNA – level impact", choices= (("m1", 'all mRNA isoforms'), ("m2", 'mRNA isoforms with coding regions being impact <span data-toggle="tooltip" data-placement="top" title="The mRNA isoforms of the selected mutation falls on the exon"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>' ), ("m3", 'brain expressed mRNA isoforms <span data-toggle="tooltip" data-placement="top" title="Have one expressed value of startswith brain tissue(log2(TPM+1) >= 1)"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>' ), ("m4", 'mRNA isoforms with coding regions being impact and brain expressed mRNA isoforms <span data-toggle="tooltip" data-placement="top" title="The mRNA isoforms of the selected mutation falls on the exon and have one expressed value of startswith brain tissue(log2(TPM+1) >= 1"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>' )), default="m1" # coerce=int #限制是int类型的 ) mrna_submit = SubmitField('Show')
class MutationProteinForm(FlaskForm): protein_radio = core.RadioField( label="Protein – level impact", choices=( ("p1", 'all proteins'), ("p2", 'Impacted proteins <span data-toggle="tooltip" data-placement="top" title="The transcript of the selected mutation falls on the exon"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>' ), ("p3", 'brain expressed proteins <span data-toggle="tooltip" data-placement="top" title="The expressed value of brain (Median protein expression, log <sub>10</sub> normalized iBAQ intensity) >=0.5 )"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>' ), ("p4", 'Impacted proteins and brain expressed proteins <span data-toggle="tooltip" data-placement="top" title="The transcript of the selected mutation falls on the exon and expressed value of brain (Median protein expression, lg normalized iBAQ intensit) >=0.5 )"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>' ), ), default="p1" # coerce=int #限制是int类型的 ) protein_submit = SubmitField('Show')
class StudentForm(Form): ID = simple.StringField(widget=widgets.HiddenInput), StudentName = simple.StringField( label="姓名", validators=[ validators.data_required(message="学生姓名不能为空!"), validators.Length(min=2, max=20, message="学生姓名长度必须大于2位,小于20位") ]) Age = core.StringField(label="年龄", validators=[ validators.data_required(message="学生年龄不能为空!"), validators.Regexp(regex="^\d+$", message="学生年龄必须为数字") ]) Gender = core.RadioField( label="性别", coerce=int, # 保存到数据中的值为int类型 choices=((0, '女'), (1, '男')), default=1) submit = simple.SubmitField(label="提交")
class RegisterForm(Form): name = simple.StringField( label='用户名', validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, default='alex' ) pwd = simple.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.') ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'} ) pwd_confirm = simple.PasswordField( label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码输入不一致") ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'} ) email = html5.EmailField( label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'} ) gender = core.RadioField( label='性别', choices=( (1, '男'), (2, '女'), ), coerce=int ) city = core.SelectField( label='城市', choices=SQLHelper.fetch_all('select id,name from city',{},None), # choices=( # (1, '篮球'), # (2, '足球'), # ), coerce=int ) hobby = core.SelectMultipleField( label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int ) favor = core.SelectMultipleField( label='喜好', choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int, default=[1, 2] ) def __init__(self, *args, **kwargs): super(RegisterForm, self).__init__(*args, **kwargs) self.city.choices = SQLHelper.fetch_all('select id,name from city',{},None) def validate_name(self, field): """ 自定义pwd_confirm字段规则,例:与pwd字段是否一致 :param field: :return: """ # 最开始初始化时,self.data中已经有所有的值 # print(field.data) # 当前name传过来的值 # print(self.data) # 当前传过来的所有的值:name,gender..... obj = SQLHelper.fetch_one('select id from users where name=%s',[field.data,]) if obj: raise validators.ValidationError("用户名已经存在") # 继续后续验证
class RegisterForm(Form): name = simple.StringField(label='用户名', validators=[validators.DataRequired()], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, default='alex') pwd = simple.PasswordField( label='密码', validators=[validators.DataRequired(message='密码不能为空.')], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) pwd_confirm = simple.PasswordField( label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码输入不一致") ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) email = html5.EmailField(label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'}) gender = core.RadioField( label='性别', choices=( (1, '男'), (2, '女'), ), coerce=int # “1” “2” ) city = core.SelectField(label='城市', choices=( ('bj', '北京'), ('sh', '上海'), )) hobby = core.SelectMultipleField(label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int) favor = core.SelectMultipleField( label='喜好', choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int, default=[1, 2]) def __init__(self, *args, **kwargs): super(RegisterForm, self).__init__(*args, **kwargs) self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球')) def validate_pwd_confirm(self, field): """ 自定义pwd_confirm字段规则,例:与pwd字段是否一致 :param field: :return: """ # 最开始初始化时,self.data中已经有所有的值 if field.data != self.data['pwd']: # raise validators.ValidationError("密码不一致") # 继续后续验证 raise validators.StopValidation("密码不一致") # 不再继续后续验证
class RegisterForm(Form): name = StringField( label='用户名', validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw={'class': 'models-control'}, default='用户名' #设置input标签中默认值 ) pwd = PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.') ], widget=widgets.PasswordInput(), render_kw={'class': 'models-control'} ) pwd_confirm = PasswordField( #第二次输入密码 label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码输入不一致") #验证2次输入的密码是否一致? ], widget=widgets.PasswordInput(), render_kw={'class': 'models-control'} ) email = html5.EmailField( label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), #生成email input标签 render_kw={'class': 'models-control'} ) gender = core.RadioField( label='性别', choices=( #choice radio选项 (1, '男'), (2, '女'), ), coerce=int #讲用户提交过来的 '4' 强制转成 int 4 ) city = core.SelectField( label='城市', choices=( ('bj', '北京'), ('sh', '上海'), ) ) hobby = core.SelectMultipleField( #select 下拉框多选框 label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int ) favor = core.SelectMultipleField( label='喜好', choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), #生成Checkbox 多选框 option_widget=widgets.CheckboxInput(), coerce=int, default=[1,2] ) def __init__(self, *args, **kwargs): #重写form验证类的__init__方法可以实时同步数据中数据 super(RegisterForm, self).__init__(*args, **kwargs) self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球')) self.city.choices=(('bj', '北京'), ('sh', '上海'), ('tj','天津')) def validate_pwd_confirm(self, field): #wtforms验证 钩子函数 """ 自定义pwd_confirm字段规则,例:与pwd字段是否一致 :param field: :return: """ # 最开始初始化时,self.data中已经有所有的值 if field.data != self.data['pwd']: # raise validators.ValidationError("密码不一致") # 继续后续验证 raise validators.StopValidation("密码不一致") # 不再继续后续验证
class RegFrom(Form): username = simple.StringField( label="账号", validators=[ validators.DataRequired(message="账号不能为空"), validators.Length(min=8, max=16, message="账号长度在8-16位之间") ], render_kw={"class": "my_username"} ) password = simple.PasswordField( label="密码", validators=[ validators.DataRequired(message="密码不能为空"), validators.Length(min=6, max=6, message="密码长度为6位"), validators.Regexp(regex='\d+', message="密码必须为数字") ], render_kw={"class": "my_password"} ) re_password = simple.PasswordField( label="确认密码", validators=[ validators.EqualTo(fieldname="password", message="两次密码不一致") ] ) email = simple.StringField( label="邮箱", validators=[ validators.Email(message="格式不正确") ], render_kw={"class": "my_email"} ) nickname = simple.StringField( label="昵称", validators=[ validators.DataRequired(message="密码不能为空"), ], render_kw={"class": "my_nickname"} ) gender = core.RadioField( label="性别", coerce=int, choices=( (1, "M"), (2, "F") ), default=1 ) hobby = core.SelectMultipleField( label="爱好", coerce=int, choices=( (1, "Apple"), (2, "Sumsung"), (3, "Mi"), (4, "Meizu"), (5, "Huawei"), (6, "Nubia") ), default=(1, 2, 3) )
class RegisterForm(Form): name = simple.StringField(label="用户名", validators=[validators.DataRequired()], widget=widgets.TextInput(), render_kw={"class": "form-control"}, default="wd") pwd = simple.PasswordField( label="密码", validators=[validators.DataRequired(message="密码不能为空")]) pwd_confim = simple.PasswordField( label="重复密码", validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码不一致") ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) # ========================html5============================ email = html5.EmailField( # 注意这里用的是html5.EmailField label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'}) # ===================以下是用core来调用的======================= gender = core.RadioField( label="性别", choices=( (1, "男"), (1, "女"), ), coerce=int # 限制是int类型的 ) city = core.SelectField(label="城市", choices=( ("bj", "北京"), ("sh", "上海"), )) hobby = core.SelectMultipleField(label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int) favor = core.SelectMultipleField( label="喜好", choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int, default=[1, 2]) def __init__(self, *args, **kwargs): # 这里的self是一个RegisterForm对象 '''重写__init__方法''' super(RegisterForm, self).__init__(*args, **kwargs) # 继承父类的init方法 self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球') ) # 把RegisterForm这个类里面的favor重新赋值,实现动态改变复选框中的选项 def validate_pwd_confim( self, field, ): ''' 自定义pwd_config字段规则,例:与pwd字段是否一致 :param field: :return: ''' # 最开始初始化时,self.data中已经有所有的值 if field.data != self.data['pwd']: # raise validators.ValidationError("密码不一致") # 继续后续验证 raise validators.StopValidation("密码不一致") # 不再继续后续验证
class RegisterForm(FlaskForm): username = simple.StringField( label="用户名", validators=[ validators.DataRequired( message="用户名不能为空") # 必填项检查 message 为返回的错误内容 ], widget=widgets.TextInput(), render_kw={"class": "form-control"}, default="wd") password = simple.PasswordField( label="密码", validators=[ validators.DataRequired(message="密码不能为空"), validators.length(6, 10, message='密码长度为6~10位'), # Regexp(r'') # 写正则 ]) pwd_confim = simple.PasswordField( label="重复密码", validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('password', message="两次密码不一致") # 相等校验 ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) mail = html5.EmailField( # 注意这里用的是html5.EmailField label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'}) gender = core.RadioField( label="性别", choices=( (1, "男"), (1, "女"), ), coerce=int # 限制是int类型的 ) city = core.SelectField(label="城市", choices=( ("bj", "北京"), ("sh", "上海"), )) hobby = core.SelectMultipleField(label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int) favor = core.SelectMultipleField( label="喜好", choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int, default=[1, 2]) # submit = simple.SubmitField( # label="提交", # render_kw={ # "class": "btn btn-primary btn-block", # }, # ) def __init__(self, *args, **kwargs): # 动态更行字段的值(可以从数据库中查到数据并赋值) '''重写__init__方法''' super(RegisterForm, self).__init__(*args, **kwargs) self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球') ) # 把RegisterForm这个类里面的favor重新赋值,实现动态改变复选框中的选项
class RegisterForm(Form): name = simple.StringField( label='用户名', validators=[validators.DataRequired(message="用户名不能为空")], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, default='alex') pwd = simple.PasswordField( label='密码', validators=[validators.DataRequired(message='密码不能为空.')], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) pwd_confirm = simple.PasswordField( label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码输入不一致") # 校验密码一致 ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) email = html5.EmailField(label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'}) gender = core.RadioField( label='性别', choices=( (1, '男'), (2, '女'), ), coerce=int # int("1") 前端提交数据默认为字符串类型,coerce设置后端接收到后为int. ) city = core.SelectField(label='城市', choices=( ('bj', '北京'), ('sh', '上海'), )) hobby = core.SelectMultipleField(label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int) favor = core.SelectMultipleField( label='喜好', choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int, default=[ 1, ])
class RegForm(Form): username = simple.StringField( label="用户名", validators=[ validators.DataRequired(message="不能为空"), validators.Length(min=3, max=5, message="不能小于3位,不能大于5位") ], # widget=widgets.TextInput(), render_kw={"class": "my_username"}) nickname = simple.StringField( label="昵称", validators=[ validators.DataRequired(message="不能为空"), ], # widget=widgets.TextInput(), render_kw={"class": "my_username"}) password = simple.PasswordField( label="密码", validators=[ validators.DataRequired(message="不能为空"), validators.Length(min=6, max=6, message="密码必须为6位"), validators.Regexp(regex="\d+", message="密码必须位数字"), ], # widget=widgets.TextInput(), render_kw={"class": "my_password"}) repassword = simple.PasswordField(label="重复密码", validators=[ validators.EqualTo( fieldname="password", message="两次密码不一致") ]) email = simple.StringField( label="昵称", validators=[ validators.Email(message="格式不正确"), ], # widget=widgets.TextInput(), render_kw={"class": "my_username"}) gender = core.RadioField(label="性别", coerce=int, choices=((1, "女"), (2, "男")), default=1) hobby = core.SelectMultipleField(label="爱好", coerce=int, choices=( (1, "小姐姐"), (2, "小萝莉"), (3, "小哥哥"), (4, "小正太"), (5, "阿姨"), (6, "大叔"), ), default=(1, 2, 5)) submit = simple.SubmitField(label="提交")