flask-WTF是对WTForms的再封装,使其更好更方便地适用于flask框架。WTForms表单的两个主要功能是验证用户提交数据的合法性和渲染模板。
安装:pip3 install flask-WTF
安装flask-WTF的时候也会自动把WTForms也安装了。
对于表单验证,如注册表单,要输入用户名,密码,重复密码,而且有很多规则限制,如长度,必须字母开头且包含数字字母下划线中的两种或以上等等,这时候就得在后端做很多逻辑判断,比较烦杂。WTForms可以帮我们来处理验证问题。
以下是注册表单的简单处理:
app.py:
1 from flask import Flask,request,render_template 2 from forms import RegisterForm,LoginForm 3 app = Flask(__name__) 4 5 @app.route('/') 6 def hello_world(): 7 return "hello world" 8 9 @app.route('/register',methods=['GET','POST']) 10 def register(): 11 if request.method == "GET": 12 return render_template('register.html') 13 else: 14 form = RegisterForm(request.form) 15 if form.validate(): 16 return "注册成功!!" 17 else: 18 return return_err_message('register.html',form) 19 20 21 @app.route('/login',methods=['GET','POST']) 22 def login(): 23 if request.method == "GET": 24 return render_template('login.html') 25 else: 26 form = LoginForm(request.form) 27 if form.validate(): 28 return "登录成功!!" 29 else: 30 return return_err_message('login.html',form) 31 32 33 def return_err_message(template,form): 34 print(form.errors) 35 err_message = list(form.errors.values())[0][0] 36 print(err_message) 37 content = { 38 'err_message': err_message 39 } 40 return render_template(template, **content) 41 42 43 if __name__ == '__main__': 44 app.run()
register.html:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>register</title> 6 </head> 7 <body> 8 <form action="" method="post"> 9 <table> 10 <tr> 11 <td>邮箱:</td> 12 <td><input type="text" name="email"></td> 13 </tr> 14 <tr> 15 <td>用户名:</td> 16 <td><input type="text" name="username"></td> 17 </tr> 18 <tr> 19 <td>密码:</td> 20 <td><input type="password" name="pwd"></td> 21 </tr> 22 <tr> 23 <td>重复密码:</td> 24 <td><input type="password" name="pwd_rep"></td> 25 </tr> 26 <tr> 27 <td>年龄:</td> 28 <td><input type="text" name="age"></td> 29 </tr> 30 <tr> 31 <td>手机号:</td> 32 <td><input type="text" name="phone"></td> 33 </tr> 34 <tr> 35 <td>主页:</td> 36 <td><input type="text" name="homepage"></td> 37 </tr> 38 <tr> 39 <td>UUID:</td> 40 <td><input type="text" name="uuid"></td> 41 </tr> 42 <tr> 43 <td></td> 44 <td><input type="submit" value="立即注册"></td> 45 </tr> 46 </table> 47 {% if err_message %} 48 <p style="color: red">{{ err_message }}</p> 49 {% endif %} 50 </form> 51 </body> 52 </html>
扫描二维码关注公众号,回复:
10867710 查看本文章
实际页面: