class LoginForm(Form): #不同的字段 内部包含正则表达式 html5.EmailField | html5.DateTimeField... name=StringField( label='用户名', validators=[ #验证规则和错误提示信息 validators.DataRequired(message='用户名不能为空.'), validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d') ], widget=widgets.TextInput(), #前端页面显示的插件.TextArea render_kw={'class': 'models-control'} #设置form标签的class信息 ) # 不同的字段 内部包含正则表达式 html5.EmailField | html5.DateTimeField... pwd = PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.'), validators.Length(min=8, message='用户名长度必须大于%(min)d'), #自定义验证规则 validators.Regexp(regex="^(?=.*[a-z])(?=.*\d)[a-z\d]{8,}", message='密码至少8个字符,1个小写字母,1个数字') ], widget=widgets.PasswordInput(), render_kw={'class': 'models-control'} )
class TagListField(Field): widget = widgets.TextInput() choices = [] def process_formdata(self, valuelist): if valuelist: self.data = valuelist else: self.data = [] def _value(self): print("_VALUE") return self.data if self.data is not None else [] def __call__(self, **kwargs): options = [] self.process_formdata(self.data) for choice in self.choices: if choice in self.data: options.append( '<option selected="selected">{}</option>'.format(choice)) else: options.append('<option>{}</option>'.format(choice)) options = ''.join(options) field = '<select class="form-control js-example-tags" multiple="multiple" id="{}" name="{}">{}</select>'.format( self.name, self.name, options) return HTMLString(field)
class MyForm(FlaskForm): Username = fields.StringField( label='用户名1', validators=[ validators.DataRequired(message='用户名不能为空'), validators.length(min=6, max=11, message='用户名长度必须大于%(min)d且小于%(max)d') ], widget=widgets.TextInput(), render_kw={ 'class': 'form-control', 'placeholder': '请输入用户名1', 'required': '', 'autofocus': '' } ) Password = fields.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空'), validators.length(min=6, message='密码必须大于%(min)d位') ], widget=widgets.PasswordInput(), render_kw={ 'class': 'form-control', 'placeholder': '请输入密码', 'required': '', 'autofocus': '' } )
class FloatField(Field): """ A text field, except all input is coerced to an float. Erroneous input is ignored and will not be accepted as a value. """ widget = widgets.TextInput() def __init__(self, label=None, validators=None, **kwargs): super(FloatField, self).__init__(label, validators, **kwargs) def _value(self): if self.raw_data: return self.raw_data[0] elif self.data is not None: return text_type(self.data) else: return "" def process_formdata(self, valuelist): if valuelist: try: self.data = float(valuelist[0]) except ValueError: self.data = None raise ValueError(self.gettext("Not a valid float value"))
class LoginFrom(FlaskForm): """用户登录表单""" account = StringField(label='用户名', validators=[ validators.DataRequired("请输入用户名!."), validators.DataRequired(message='用户名不能为空.'), validators.Length(min=4, message='用户名长度必须大于%(min)') ], widget=widgets.TextInput(), render_kw={ 'class': 'loginusername', "placeholder": "请输入用户名!" }) pwd = PasswordField(label='密码', validators=[ validators.DataRequired("请输入密码!."), validators.DataRequired(message='密码不能为空.'), ], widget=widgets.PasswordInput(), render_kw={ 'class': 'loginuserpassword', "placeholder": "请输入密码!" }) submit = SubmitField(label='登录', render_kw={"class": "loginbtn"}) def validate_account(self, field): name = field.data user = User.query.filter_by(name=name).count() if user == 0: raise validators.ValidationError("用户名错误!")
class RegisterForm(BaseForm): username = StringField( label='用户名', validators=[ DataRequired(), validators.Length(2, 15, message='昵称至少需要两个字符,最多15个字符') ], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, default='root' ) password = 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('password', message="两次密码输入不一致") ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'} ) def validate_username(self, field): if User.query.filter_by(username=field.data).first(): raise validators.ValidationError('用户名已存在')
class LoginForm(BaseForm): username = StringField( label='用户名', validators=[ DataRequired(), validators.Length(2, 15, message='昵称至少需要两个字符,最多15个字符') ], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, default='root' ) password = simple.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.') ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'} ) def validate_username(self, field): user = User.query.filter_by(username=field.data).first() if not user: raise validators.ValidationError('用户名不存在') elif not user.is_active: raise validators.ValidationError("用户账户未启用")
class CustomTimeField(fields.Field): widget = widgets.TextInput() def __init__(self, label=None, validators=None, format='%H:%M:%S', **kwargs): super(CustomTimeField, self).__init__(label, validators, **kwargs) self.format = format def _value(self): if self.raw_data: return u' '.join(self.raw_data) else: return self.data and self.data.strftime(self.format) or u'' def process_formdata(self, valuelist): if valuelist: date_str = u' '.join(valuelist) try: self.data = datetime.datetime.strptime(date_str, self.format).time() except ValueError: try: self.data = datetime.datetime.strptime(date_str, '%H:%M').time() except ValueError: self.data = None raise ValueError(self.gettext(u'Not a valid time value'))
class LoginForm(Form): '''Form''' name = simple.StringField( label="Username", widget=widgets.TextInput(), validators=[ validators.DataRequired(message="username cannot be empty"), validators.Length( max=20, min=5, message="The length of username should between 5 and 20") ], render_kw={"class": "form-control"}) pwd = simple.PasswordField( label="password", validators=[ validators.DataRequired(message="password cannot be empty"), validators.Length( max=30, min=5, message="The length of password should between 5 and 30"), ], widget=widgets.PasswordInput(), render_kw={"class": "form-control"})
class F(Form): a = SelectField(choices=[("a", "hello"), ("btest", "bye")], default="a") b = SelectField( choices=[(1, "Item 1"), (2, "Item 2")], coerce=int, option_widget=widgets.TextInput(), )
class LoginForm(Form): # 字段(内部包含正则表达式) name = simple.StringField( label='用户名', validators=[ # 内部校验器 validators.DataRequired(message='用户名不能为空.'), validators.Length(min=2, max=18, message='用户名长度必须大于%(min)d且小于%(max)d') ], # 页面的显示插件 widget=widgets.TextInput(), # 给插件添加的属性 # render_kw={'class': 'form-control'} ) # pwd = html5.EmailField() # 可以使用html5的验证方式 pwd = simple.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.'), validators.Length(min=2, message='用户名长度必须大于%(min)d'), ], widget=widgets.PasswordInput(), # render_kw={'class': 'form-control'} )
class TagListField(Field): widget = widgets.TextInput() def __init__(self, label='', validators=None, remove_duplicates=True, **kwargs): super().__init__(label, validators, **kwargs) self.remove_duplicates = remove_duplicates def process_formdata(self, valuelist): if valuelist: self.data = [x.strip() for x in valuelist[0].split(',')] else: self.data = [] if self.remove_duplicates: self.data = list(self._remove_duplicates(self.data)) def _value(self): if self.data: return ', '.join(self.data) else: return '' @classmethod def _remove_duplicates(cls, seq): """Remove duplicates in a case insensitive, but case preserving manner""" d = {} for item in seq: if item.lower() not in d: d[item.lower()] = True yield item
class DateTimeField(Field): """ A text field which stores a `datetime.datetime` matching a format. """ widget = widgets.TextInput() def __init__(self, label=None, validators=None, format="%Y-%m-%d %H:%M:%S", **kwargs): super(DateTimeField, self).__init__(label, validators, **kwargs) self.format = format def _value(self): if self.raw_data: return " ".join(self.raw_data) else: return self.data and self.data.strftime(self.format) or "" def process_formdata(self, valuelist): if valuelist: date_str = " ".join(valuelist) try: self.data = datetime.datetime.strptime(date_str, self.format) except ValueError: self.data = None raise ValueError(self.gettext("Not a valid datetime value"))
class LoginForm(Form): name = fields.StringField( label="用户名", validators=[ validators.DataRequired(message="用户名不能为空"), validators.Length(min=3, max=32, message="用户名长度必须大于%(min)d且小于%(max)d"), ], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, ) pwd = fields.PasswordField( label="密码", validators=[ validators.DataRequired(message="密码不能为空"), validators.Length(min=8, max=32, message='密码长度必须大于%(min)d且小于%(max)d'), # validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}", # message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符'), ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}, )
class RegisterForm(FlaskForm): username = simple.StringField(label="请输入用户名:", validators=[ validators.DataRequired(message="用户名不能为空"), validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d,且小于%(max)d') ], widget=widgets.TextInput(),render_kw={"class":"form-control"} ) password = simple.StringField(label="请输入密码:", validators=[ validators.DataRequired(message="密码不能为空"), validators.Length(min=8,message="密码至少%(min)d位"), validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)" "[A-Za-z\d~!@#$%^&*()_+]{8,}", message="密码至少包含1个小写和大写字母以及1个数字") ], widget=widgets.PasswordInput(),render_kw={"class":"form-control"}) # 确认密码 password2 = simple.StringField(label="请确认密码:", validators=[ validators.DataRequired(message="请确认您的密码"), EqualTo("password",message="两次密码输入不一致") ], widget=widgets.PasswordInput(),render_kw={"class":"form-control", "placeholder":"确认密码"} )
class IntegerField(Field): """ A text field, except all input is coerced to an integer. Erroneous input is ignored and will not be accepted as a value. """ widget = widgets.TextInput() def __init__(self, label=None, validators=None, **kwargs): super(IntegerField, self).__init__(label, validators, **kwargs) def _value(self): if self.raw_data: return self.raw_data[0] elif self.data is not None: return text_type(self.data) else: return '' def process_data(self, value): if value is not None and value is not unset_value: try: self.data = int(value) except (ValueError, TypeError): self.data = None raise ValueError(self.gettext("Not a valid integer value")) else: self.data = None def process_formdata(self, valuelist): if valuelist: try: self.data = int(valuelist[0]) except ValueError: self.data = None raise ValueError(self.gettext('Not a valid integer value'))
class LoginFrom(FlaskForm): """管理员登录表单""" account = StringField(label='用户名', validators=[ validators.DataRequired("请输入用户名!."), validators.DataRequired(message='用户名不能为空.'), ], widget=widgets.TextInput(), render_kw={ 'class': 'form-control', "placeholder": "请输入用户名!" }) pwd = PasswordField(label='密码', validators=[ validators.DataRequired("请输入密码!."), validators.DataRequired(message='密码不能为空.'), ], widget=widgets.PasswordInput(), render_kw={ 'class': 'form-control', "placeholder": "请输入密码!" }) submit = SubmitField(label='登录', render_kw={"class": "logC"}) def validate_account(self, field): account = field.data admin = Admin.query.filter_by(name=account).count() if admin == 0: raise ValidationError("帐号不存在!")
class DateTimeField(Field): """ A text field which stores a `datetime.datetime` matching a format. """ widget = widgets.TextInput() def __init__(self, label=u'', validators=None, format='%Y-%m-%d %H:%M:%S', **kwargs): super(DateTimeField, self).__init__(label, validators, **kwargs) self.format = format def _value(self): if self.raw_data: return u' '.join(self.raw_data) else: return self.data and self.data.strftime(self.format) or u'' def process_formdata(self, valuelist): if valuelist: date_str = u' '.join(valuelist) try: timetuple = time.strptime(date_str, self.format) self.data = datetime.datetime(*timetuple[:6]) except ValueError: self.data = None raise
class LoginForm(Form): # 字段(内部包含正则表达式) name = simple.StringField( label='用户名', validators=[ validators.DataRequired(message='用户名不能为空.'), validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d') ], widget=widgets.TextInput(), # 页面上显示的插件 render_kw={'class': 'form-control'}) # 字段(内部包含正则表达式) pwd = simple.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.'), validators.Length(min=8, message='用户名长度必须大于%(min)d'), validators.Regexp( regex= "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}", message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符') ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'})
class IntegerListField(Field): """ Custom field to support sending in multiple integers separated by commas and returning the content as a list """ widget = widgets.TextInput() def __init__(self, label='', validators=None, **kwargs): super(IntegerListField, self).__init__(label, validators, **kwargs) def _value(self): if self.data: string_data = [str(y) for y in self.data] return u','.join(string_data) else: return u'' def process_formdata(self, valuelist): if valuelist: self.data = [int(x.strip()) for x in valuelist[0].split(',')] else: self.data = [] def process_data(self, valuelist): if valuelist: self.data = [int(x.strip()) for x in valuelist[0].split(',')] else: self.data = []
class LoginForm(Form): user = simple.StringField(label='用户名', validators=[ validators.DataRequired(message='用户名不能为空.'), validators.Length( min=2, max=18, message='用户名长度必须大于%(min)d且小于%(max)d') ], widget=widgets.TextInput(), render_kw={ 'class': 'form-control', 'placeholder': '用户名' }) pwd = simple.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.'), validators.Length(min=2, message='用户密码长度必须大于%(min)d'), # validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}", # message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符') ], widget=widgets.PasswordInput(), render_kw={ 'class': 'form-control', 'placeholder': '密码' })
class LoginForm(Form): '''Form''' name = simple.StringField( label="用户名", widget=widgets.TextInput(), validators=[ validators.DataRequired(message="用户名不能为空"), validators.Length(max=8, min=3, message="用户名长度必须大于%(max)d且小于%(min)d") ], render_kw={"class": "form-control"} # 设置属性生成的html属性 ) pwd = simple.PasswordField(label="密码", validators=[ validators.DataRequired(message="密码不能为空"), validators.Length( max=18, min=4, message="密码长度必须大于%(max)d且小于%(min)d"), validators.Regexp(regex="\d+", message="密码必须是数字"), ], widget=widgets.PasswordInput(), render_kw={"class": "form-control"})
class RegisterForm(Form): phone = simple.StringField(validators=[ validators.DataRequired(message="手机号不能为空"), validators.Length(max=11, min=7, message="手机号长度不对请输入正确的手机号") ], widget=widgets.TextInput()) username = simple.StringField(validators=[ validators.DataRequired(message="用户名不能为空"), validators.Length(max=20, message="用户名长度不能超过20") ], widget=widgets.TextInput()) password = simple.PasswordField(validators=[ validators.DataRequired(message="密码不能为空"), validators.Length(max=16, min=6, message="密码长度应在6~16之间") ], widget=widgets.PasswordInput())
class RegistrationForm(FlaskForm): username = StringField( label =u'用户名', validators = [ validators.DataRequired(message='用户名不能为空'), validators.length(min=4, max=16, message='用户名长度必须大于%(min)d且小于%(max)d')] ) nickname = StringField( label =u'昵称', validators = [ validators.DataRequired(message='昵称不能为空'), validators.length(min=4, max=32, message='昵称长度必须大于%(min)d且小于%(max)d')] ) email = StringField(label='电子邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'} ) password = PasswordField( label=u'密码', validators=[ validators.DataRequired(message=u'密码不能为空'), validators.length(min=6, message=u'密码必须大于%(min)d位') ], widget=widgets.PasswordInput()) password2 = PasswordField( label=u'重复密码', validators=[ validators.DataRequired(message=u'重复密码不能为空.'), validators.EqualTo('password',message=u'两次密码不一致') ] ) gender = fields.RadioField( label=u'性别', choices=( (1,u'男'), (0,u'女'), ), coerce=int, #限制是int类型的 render_kw={'class': 'form-control'} ) submit = SubmitField(u'注册') def validate_username(self, username): user = User.query.filter_by(username=username.data).first() if user is not None: raise ValidationError('该用户名已经被注册!') def validate_email(self, email): user = User.query.filter_by(email=email.data).first() if user is not None: raise ValidationError('该邮箱已经被注册.')
class UpdateInfoForm(Form): username = simple.StringField( label='用户名', validators=[ validators.DataRequired(message='用户名不能为空'), validators.Length(min=3, max=18, message='用户名长度必须大于%(min)d, 并且小于%(max)d'), ], widget=widgets.TextInput(), render_kw={'class': 'form-control'}) age = simple.StringField(label='用户年龄', widget=widgets.TextInput(), render_kw={'class': 'form-control'}) hometown = simple.StringField(label='用户居住城市', widget=widgets.TextInput(), render_kw={'class': 'form-control'})
class SearchForm(Form): content = simple.StringField( label="", widget=widgets.TextInput(), validators=[ validators.DataRequired(message="请输入搜索内容")], render_kw={"class": "form-control"} # 设置属性生成的html属性 )
class RoomCreateForm(Form): roomname = simple.StringField( validators=[ validators.DataRequired(message='房間名不能为空.'), validators.Length(min=2, message='房間名长度必须大于%(min)d'), ], widget=widgets.TextInput(), )
class LoginForm(Form): name = simple.StringField(label='用户名', validators=[ validators.DataRequired(message='用户名不能为空.'), validators.Length( min=1, max=18, message='用户名长度必须大于%(min)d且小于%(max)d') ], widget=widgets.TextInput(), render_kw={ 'class': 'form-control', 'placeholder': "用户名" }) pwd = simple.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.'), validators.Length(min=1, message='密码长度必须大于%(min)d'), # validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}", # message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符') ], widget=widgets.TextInput(), render_kw={ 'class': 'form-control', 'placeholder': '密码' }) # @app.route('/login', methods=['GET', 'POST']) # def login(): # if request.method == 'GET': # form = LoginForm() # return render_template('login.html', form=form) # else: # form = LoginForm(formdata=request.form) # if form.validate(): # print('用户提交数据通过格式验证,提交的值为:', form.data) # else: # print(form.errors) # return render_template('login.html', form=form) # if __name__ == '__main__': # l = LoginForm() # app.run()
class NewForm(Form): employeeId = StringField(label=u'员工编号', validators=[ validators.DataRequired(message=u'员工编号不能为空'), validators.regexp('\d{6}', message=u'必须为6位数字'), validators.Length(min=6, max=6, message=u'员工编号长度必须为%(min)d') ], widget=widgets.TextInput(), render_kw={'class': 'form-control'}) temperature = FloatField( label=u'体温', validators=[validators.DataRequired(message=u'体温格式不正确')], widget=widgets.TextInput(), render_kw={'class': 'form-control'}) new = SubmitField(render_kw='btn btn-success')
class NodesInfo(Form): host = simple.StringField( label='地址', validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw={'class': 'form-control', 'placeholder': '例如:192.168.0.1', 'style': 'width: 250px'} ) port = simple.StringField( label='端口', validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw={'class': 'form-control', 'placeholder': '例如:5000', 'style': 'width: 250px'} )