class addForm(FlaskForm): language = core.SelectField( label='基础环境镜像:', choices=language_choices(), ) pluginname = simple.StringField( label='接口名称: ', widget=widgets.TextInput(), # validators=[DataRequired(message='接口名称不能为空'), # NoneOf(['t1', 't2', 't10', '3'], message='wuxiao', values_formatter = 'caonima')] # render_kw={ # "placeholder":"请输入账号!", # "required":'required' #表示输入框不能为空,并有提示信息 # } ) inputfilename = simple.StringField( label='输入文件名: ', widget=widgets.TextInput(), # validators=[DataRequired()] ) inputtype = core.SelectMultipleField( label='输入数据类型:', choices=(('txt', 'txt'), ('world', 'world'), ('jpg', 'jpg'), ('png', 'png')), default=['txt', 'world', 'jpg', 'png']) outputfilename = simple.StringField(label='输出文件名:', widget=widgets.TextInput()) outputtype = core.SelectMultipleField( label='输出数据类型:', choices=(('txt', 'txt'), ('world', 'world'), ('jpg', 'jpg'), ('png', 'png')), option_widget=widgets.CheckboxInput(), default=['txt', 'world', 'jpg', 'png']) sources = core.SelectField(label='软件源:', render_kw={'class': 'index-select'}, choices=sources_choices()) textarea = TextAreaField( label='接口运行环境:', render_kw={'class': 'text-control'}, # validators=[DataRequired()] ) pluginfile = FileField( label='文件选择:', # validators=[FileRequired(), # FileAllowed(['jpg','jpeg','png','gif'])] ) runCommand = simple.StringField(label='运行命令:', widget=widgets.TextInput()) detail = TextAreaField( label='接口描述:', render_kw={'class': 'text-detail'}, # validators=[DataRequired()] ) save = simple.SubmitField('检查') pulish = simple.SubmitField('提交')
class Userforms(Form): id = simple.StringField() service = core.SelectField(choices=(), ) def __init__(self, *args, **kwargs): super(Userforms, self).__init__(*args, **kwargs) conn = DataBase() self.service.choices = conn.get_all( "select * from userform", []) # 数据变化时,动态更新前端数据. 类的静态字段初始化时生产.
class UserForm(Form): city = core.SelectField(label='请选择回放记录', choices=(), coerce=int) def __init__(self, *args, **kwargs): super(UserForm, self).__init__(*args, **kwargs) db = pymysql.connect(host="localhost", user="******", password="******", database="fall") cursor = db.cursor() # pymysql 语句 sql = "select id,createTime from VideoList" cursor.execute(sql) self.city.choices = cursor.fetchall() db.commit() # 关闭数据库连接 db.close()
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 = 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 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(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 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重新赋值,实现动态改变复选框中的选项