WTForms表单验证的基本使用
程序员文章站
2023-12-21 16:33:52
...
Flask中WTForms的表单验证使用
'''
WTForms的基本使用步骤:
1. 自定义表单类,并继承wtforms.Form类。
2. 定义好需验证的字段,字段名应与input标签的name名一致。
3. 在字段上指定具体的数值类型(如StringField,IntegerField等)。
4. 在相关字段上指定验证器。
5. 将request.form作为参数通过vaildate()方法验证,返回布尔类型。
'''
import ...
'''
WTForms常用的验证方法:
1. Email(): 验证是否符合email格式。
2. InputRequired(): 要求不为空。
3. NumberRange(start, end): 数值范围。
4. Regexp(pattern): 正则表达式。
5. URL(): url地址形式。
6. UUID(): uuid。
7. Length(num1, num2): 用于指定字符长度范围。
8. EqualTo('input.name'): 与另一个input标签的value值进行比较
通过email=StringField([Length(7,15,message='...'), ...], validators=[Email('..'), ...]使用
'''
# 以常见的用户注册表单为例:
# 即input.name包含['uname', 'pwd', 're_pwd', 'email', 'phonenum', 'code'(验证码)]
class MyForm(Form):
# 设置每个input.name标签的验证方法以及错误信息(message参数)的内容
uname = StringField(validators=[InputRequired(message='不为空'), Length(6,10)])
pwd = StringField(validators=[InputRequired('不为空'), Length(6,12, '长度必须在6到12')])
re_pwd = StringField(validators=[InputRequired(), EqualTo('pwd', '俩次密码输入不一致')])
email = StringField(validators=[Email('email格式不对')])
# flags=0可不加默认为0, 底层为re.IGNORECASE
# flags表示是否忽略匹配对象不为str
phonenum = StringField(validators=[Regexp('^1[35789]\d{9}$', flags=0, message='电话格式不符')])
code = StringField(validators=[InputRequired()])
# 自定义验证方法:
def validate_code(self, field): # field为input.name标签的value值
# field.data可将对应的value值取出,这里是'code'标签。
if field.data != session.get('code', ''):
raise ValidationError('验证码不正确') # 底层是ValueError(Exception)类
class MyView(views.MethodView):
def __jump(self, error='', **kwargs):
return render_template('register.html', error=error, **kwargs)
def get(self):
# g.code = random.randint(1000, 9999)
# session['code'] = str(g.code)
get_code() # 将g.code保存在session防止用户打开新标签时code不刷新
return self.__jump(gcode=g.code)
def post(self):
myform = MyForm(request.form) # request.form将value值传递给MyForm中的field
if myform.validate():
return '注册成功'
else:
get_code()
# myform.errors为{'uname':['用户不为空'], ...}形式的字典
return self.__jump(gcode=g.code, **(myform.errors))
version1.add_url_rule('/wtf/', view_func=MyView.as_view('wtf'))
wtforms除了表单验证还有渲染模版的功能,但是比较鸡肋。