WTForms表单验证
Flask-WTF
Flask-WTF是简化了WTForms操作的一个第三方库
WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。
还包括一些其他的功能:
CSRF(跨站点请求伪造(Cross Site Request Forgery))保护,文件上传等。
安装Flask-WTF默认也会安装WTForms,因此使用以下命令来安装Flask-WTF
pip install flask-wtf
# @ Time : 2020/4/30 0:09
# @ Author : Ellen
from flask import Flask, request, render_template
from flask_sqlalchemy import SQLAlchemy
from forms import RegistForm
app = Flask(__name__)
@app.route("/")
def index():
return "首页"
# 注册两个请求 默认只接收GET请求 要接收POST
@app.route("/regist/", methods=['GET', 'POST'])
def regist():
if request.method == 'GET':
return render_template('regist.html')
else:
form = RegistForm(request.form)
if form.validate():
return "success"
else:
# 验证的错误信息
print(form.errors)
return "fail"
# 只需要一个验证的结果
# username = request.form.get('username')
# password = request.form.get('password')
# password_repeat = request.form.get('password_repeat')
# # print(username)
# if len(username) < 3 or len(username) > 10:
# return "输入的用户名长度不正确"
#
# if password != password_repeat:
# return "输入的两次密码不一致"
#
# if len(password) < 3 or len(password) > 10:
# return "输入的密码长度不正确"
if __name__ == '__main__':
app.run(debug=True)
# @ Time : 2020/4/30
# @ Author : Ellen
from wtforms import Form, StringField, validators
from wtforms.validators import Length, Regexp, EqualTo
# 表单验证
class RegistForm(Form):
username = StringField(validators=[Length(min=3, max=10, message='用户名长度不正确')])
password = StringField(validators=[Length(min=3, max=10)])
password_repeat = StringField(validators=[Length(min=3, max=10, message='密码长度不对'), EqualTo('password', message='两次密码不一致')])
# 登录验证
class LoginForm(Form):
# email = StringField(validators=[Email()])
# age = IntegerField(validators=[NumberRange(1, 120, message='年龄范围有误')])
# username = StringField(validators=[InputRequired(message='用户名必须填写')])
# phone = StringField(validators=[Regexp(r'1[358]\d{9}', message='输入的手机号不正确')])
# info = StringField(validators=[URL(message='输入的url不正确')])
# 验证码
captcha = StringField(validators=[Length(min=4, max=4)])
# print(type(captcha))
# print(captcha)
# 内容?验证码的对错 假设固定为'4587'
# if captcha == '4587': # 这样写不行,captcha是一个类,和字符串永远不相等怎么判断都没有效果
# print('验证码正确')
# else:
# print('验证码错误')
# validate_验证的字段
def validate_captcha(self, field):
print(type(field))
if field != '4587':
raise ValidationError('验证码错误')
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
<table>
<!-- <tr>-->
<!-- <td>邮箱:</td>-->
<!-- <td><input type="text" name="email"></td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td>年龄:</td>-->
<!-- <td><input type="text" name="age"></td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td>用户名:</td>-->
<!-- <td><input type="text" name="username"></td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td>手机号:</td>-->
<!-- <td><input type="text" name="phone"></td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td>个人主页:</td>-->
<!-- <td><input type="text" name="info"></td>-->
<!-- </tr>-->
<tr>
<td>验证码:</td>
<td><input type="text" name="captcha"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
页面: