WTF表单验证可分为3个步骤:
①导入wtf扩展提供的表单验证器。(from wtforms.validators import DataRequired,EqualTo)
②定义表单类
# 定义表单类 class RegisterForm(FlaskForm): username =StringField(\'账号:\',validators=[DataRequired()]) password =PasswordField(\'密码:\',validators=[DataRequired()]) password2 = PasswordField(\'确认密码:\',validators=[DataRequired(),EqualTo(\'password\',\'两次密码不一致\')]) submit=SubmitField(\'提交\')
③验证逻辑(判断请求方式——>请求参数——>验证)
redist_form=RegisterForm() if request.method==\'POST\': username=request.form.get(\'username\') password = request.form.get(\'password\') password2 = request.form.get(\'password2\') if redist_form.validate_on_submit(): print(username,password) return \'success\' else: flash(\'参数有误\') return render_template(\'registform.html\',form=redist_form)
完整代码:
app.py
from flask import Flask,render_template,request,flash from flask_wtf import FlaskForm from wtforms import StringField, PasswordField,SubmitField from wtforms.validators import EqualTo,DataRequired app = Flask(__name__) app.secret_key=\'yingjie\' # 定义表单类 class RegisterForm(FlaskForm): username =StringField(\'账号:\',validators=[DataRequired()]) password =PasswordField(\'密码:\',validators=[DataRequired()]) password2 = PasswordField(\'确认密码:\',validators=[DataRequired(),EqualTo(\'password\',\'两次密码不一致\')]) submit=SubmitField(\'提交\') @app.route(\'/regist\',methods=[\'GET\',\'POST\']) def regist_form(): redist_form=RegisterForm() if request.method==\'POST\': username=request.form.get(\'username\') password = request.form.get(\'password\') password2 = request.form.get(\'password2\') if redist_form.validate_on_submit(): print(username,password) return \'success\' else: flash(\'参数有误\') return render_template(\'registform.html\',form=redist_form) if __name__ == \'__main__\': app.run()
registform.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="post"> {{ form.csrf_token() }} {{ form.username.label }}{{ form.username }}<br> {{ form.password.label }}{{ form.password }}<br> {{ form.password2.label }}{{ form.password2 }}<br> {{ form.submit }} </form> {% for message in get_flashed_messages() %} {{ message }} {% endfor %} </body> </html>
运行截图: