Flask-WTF拓展:
Flask-WTF拓展是Flask的一个模块,用于处理Web表单。Web表单用于通过HTTP GET或HTTP POST请求向服务端提交数据。Flask-WTF扩展的主要功能如下:
1. 生成表单组件的HTML代码
2. 后台验证
3. 向Web端返回错误信息
4. 在Web页面上显示错误信息
5. 防止跨域访问
使用Flask-WTF之前需要在运行环境下安装:
因为我用的是Anaconda建立的虚拟环境,所以打开Anaconda prompt 后先打开虚拟环境,再进行安装
- activate venv
- pip install flask_wtf
表单类:
Flask-WTF扩展的核心功能之一就是用于校验表单提交的数据。在
Flask-WTF扩展中将一个表单映射成一个FlaskForm类,可以将这个类
称为表单类。该类拥有生成表单代码、校验表单数据等功能。
下面的代码是用于映射表单的MyForm类,该类从FlaskForm 继承,并且定义了两个文本输入组件和一个提交按钮组件。
class MyForm(FlaskForm):
name=TextField(...)
country=TextField(...)
submit=SubmitField(...)
每一个组件类都需要为构造方法传入参数。
文本输入和提交的表单:
flask_form.py
from flask import Flask,request,render_template
from flask_wtf import FlaskForm
from wtforms import TextField,SubmitField,validators
app=Flask(__name__)
app.secret_key='sdlkajdj45'
###用于Session/Cookie/Flask-WTF的CSRF保护等加密的密钥,密钥可随意指定,就是一个普通的字符串
#定义表单类
class ContactForm(FlaskForm):
#用于输入文本的字段,其中validators.Required是一个校验器,表示该字段必须输入
firstname=TextField('姓名',[validators.Required('姓名必须输入')])
submit=SubmitField('提交')
##用于处理GET和POST请求的路由函数
@app.route('/',methods=['GET','POST'])
def contact():
form=ContactForm()
#只处理POST请求
if request.method=='POST':
#校验表单数据
if form.validate_on_submit()==False:
print(form.firstname.errors)
print('error')
#将校验结果和表单代码返回客户端
return render_template('first.txt',form=form)
if __name__=="__main__":
app.run()
first.txt
<html>
<head>
<meta charset='UTF-8'>
<title>Flask-WTF模块</title>
</head>
<body>
<!--输出与firstname字段相关的错误信息-->
{% for message in form.firstname.errors %}
<div>{{message}}
{% endfor %}
<!--定义表单-->
<form action="http://localhost:5000" method=post>
<fieldset>
<!--生成用于保存加密字符串的隐藏文本组件-->
{{form.hidden_tag()}}
<!--生成文本组件的标签名称的代码-->
{{form.firstname.label}}<br>
<!--生成文本组件的代码-->
{{form.firstname}}
<br>
<!生成提交按钮的代码-->
{{form.submit}}
</fieldset>
</form>
</body>
</html>
运行程序,地址:http://localhost:5000,然后不在文本框输入任何字符串,单击“提交”,会有错误提示