多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
| 字段类型 | 说明 | | --- | --- | | StringField | 文本字段, 相当于type类型为text的input标签 | | TextAreaField | 多行文本字段 | | PasswordField | 密码文本字段 | | HiddenField | 隐藏文本字段 | | DateField | 文本字段, 值为datetime.date格式 | | DateTimeField | 文本字段, 值为datetime.datetime格式 | | IntegerField | 文本字段, 值为整数 | | DecimalField | 文本字段, 值为decimal.Decimal | | FloatField | 文本字段, 值为浮点数 | | BooleanField | 复选框, 值为True 和 False | | RadioField | 一组单选框 | | SelectField | 下拉列表 | | SelectMultipleField | 下拉列表, 可选择多个值 | | FileField | 文件上传字段 | | SubmitField | 表单提交按钮 | | FormFiled | 把表单作为字段嵌入另一个表单 | | FieldList | 子组指定类型的字段 | | 验证函数 | 说明 | | --- | --- | | Email | 验证是电子邮件地址 | | EqualTo | 比较两个字段的值; 常用于要求输入两次密钥进行确认的情况 | | IPAddress | 验证IPv4网络地址 | | Length | 验证输入字符串的长度 | | NumberRange | 验证输入的值在数字范围内 | | Optional | 无输入值时跳过其它验证函数 | | DataRequired | 确保字段中有数据 | | Regexp | 使用正则表达式验证输入值 | | URL | 验证url | | AnyOf | 确保输入值在可选值列表中 | | NoneOf | 确保输入值不在可选列表中 | - 内联验证器 ~~~ def my_length_check(form, field): if len(field.data) > 50: raise ValidationError('Field must be less than 50 characters') class MyForm(Form): name = StringField('Name', [InputRequired(), my_length_check]) ~~~ - 通用且可重用的验证函数 ``` class UserForm(Form): ''' 用户验证字段 ''' account = StringField(validators=[DataRequired(message='用户名不能为空'), length(min=5, max=32, message='用户名长度在5-32位')]) secret = StringField() type = IntegerField(validators=[DataRequired()]) def validate_type(self, value): ''' 通用且可重用的验证函数 一般是以validate开头,加上下划线再加上对应的field字段(validate_filed),会自动识别对应字段所有的验证器,然后执行验证器进行判断 :param value: :return: ''' try: user = UserTypeEnum(int(value.data)) self.type.data = user except ValueError as e: raise e class UserEmailForm(ClientForm): account = StringField(validators=[ Email(message='invalidate email') ]) secret = StringField(validators=[ DataRequired(), # password can only include letters , numbers and "_" Regexp(r'^[A-Za-z0-9_*&$#@]{6,22}$') ]) nickname = StringField(validators=[DataRequired(), length(min=2, max=22)]) def validate_account(self, value): if User.query.filter_by(email=value.data).first(): raise ValidationError() ``` ``` from flask import Blueprint, request from app.libs.enums import UserTypeEnum from app.validators.forms import UserForm user = Blueprint('user', __name__) @user.route('/get', methods=['GET']) def get_user(): # 接收数据 data = request.json # 验证数据 form = UserForm(data=data) if form.validate(): # 如果验证通过,根据枚举类型调用对应的方法 promise = { UserTypeEnum.USER_EMAIL: __register_user_by_email } promise[form.type.data]() else: print(form.errors) def __register_user_by_email(): pass ```