1.普通的表单验证
Web表单
Web 表单是 Web 应用程序的基本功能。
它是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。
在Flask中,为了处理web表单,我们可以使用 Flask-WTF 扩展,它封装了 WTForms,并且它有验证表单数据的功能。
WTForms支持的HTML标准字段
字段对象 | 说明 |
---|---|
StringField | 文本字段 |
TextAreaField | 多行文本字段 |
PasswordField | 密码文本字段 |
HiddenField | 隐藏文件字段 |
DateField | 文本字段,值为 datetime.date 文本格式 |
DateTimeField | 文本字段,值为 datetime.datetime 文本格式 |
IntegerField | 文本字段,值为整数 |
DecimalField | 文本字段,值为decimal.Decimal |
FloatField | 文本字段,值为浮点数 |
BooleanField | 复选框,值为True 和 False |
RadioField | 一组单选框 |
SelectField | 下拉列表 |
SelectMutipleField | 下拉列表,可选择多个值 |
FileField | 文件上传字段 |
SubmitField | 表单提交按钮 |
FormField | 把表单作为字段嵌入另一个表单 |
FieldList | 一组指定类型的字段 |
WTForms常用验证函数
验证函数 | 说明 |
---|---|
DataRequired | 确保字段中有数据 |
EqualTo | 比较两个字段的值,常用于比较两次密码输入 |
Length | 验证输入的字符串长度 |
NumberRange | 验证输入的值在数字范围内 |
URL | 验证URL |
AnyOf | 验证输入值在可选列表中 |
NoneOf | 验证输入值不在可选列表中 |
代码
# -*- coding:utf-8 -*-
from flask import Flask, render_template, request
app = Flask(__name__)
'''
目的:实现一个简单的登录逻辑的处理
1. 路由需要get和post两种请求方式 --> 需要判断请求方式
2. 获取请求的参数
3. 判断参数是否填写 & 密码是否相同
4. 如果判断都没有问题,就返回一个success
'''
@app.route('/', methods=['GET','POST'])
def index():
# request: 请求对象 --> 获取请求方式、数据
# 1. 判断请求方式
if request.method == 'POST':
# 2.获取请求的参数
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
print(password)
# 3.判断参数是否填写 & 密码是否相同
if not all([username, password, password2]):
print('参数不完整')
elif password != password2:
print('密码不一致')
else:
return 'success'
return render_template('index.html')
if __name__ == '__main__':
app.run()
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
<label>用户名:</label><input type="text" name="username"><br/>
<label>密码:</label><input type="password" name="password" ><br/>
<label>确认密码:</label><input type="password" name="password2"><br/>
<input type="submit" value="提交"><br/>
</form>
</body>
</html>
2.flash消息快闪
本节优化:代码出现问题时只能通过控制台查看,希望如果出错可以在网页中显示
给模板传递消息,需要使用flash
代码
# -*- coding:utf-8 -*-
from flask import Flask, render_template, request, flash
app = Flask(__name__)
app.secret_key = 'flask'
'''
目的:实现一个简单的登录逻辑的处理
1. 路由需要get和post两种请求方式 --> 需要判断请求方式
2. 获取请求的参数
3. 判断参数是否填写 & 密码是否相同
4. 如果判断都没有问题,就返回一个success
'''
'''
给模板传递消息
flash --> 需要对内容加密,因此需要设置secret_key,做加密消息的混淆
模板中需要遍历消息
'''
@app.route('/', methods=['GET','POST'])
def index():
# request: 请求对象 --> 获取请求方式、数据
# 1. 判断请求方式
if request.method == 'POST':
# 2.获取请求的参数
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
print(password)
# 3.判断参数是否填写 & 密码是否相同
if not all([username, password, password2]):
# print('参数不完整')
flash(u'参数不完整')
elif password != password2:
# print('密码不一致')
flash(u'密码不一致')
else:
return 'success'
return render_template('index.html')
if __name__ == '__main__':
app.run()
index.html
{# 使用遍历获取闪现的消息 #}
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
- 使用 Flask-WTF 需要配置参数 SECRET_KEY(
app.secret_key = 'flask'
),CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。 SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密匙生成加密令牌。否则会出现下边错误:
- 由于编码问题,需要加‘u’( flash(u’密码不一致’)),否则会出现下边错误
3.WTF表单的显示
首先,安装FLASK-WTF