Python-flask的wtf表单应用
- 导入wtf库
在一个flask导入flask-wtf库
from flask_wtf import FlaskForm
- 自定义表单类
在创立表单的时候我们需要自定义表单类

我们做一个最基本的wtf表单,这里如图所示需要StringField,PasswordField,SubmitField三种表单类
引入
from wtforms import StringField,PasswordField,SubmitField
以及导入验证函数
from wtforms.validators import DataRequired,EqualTo
创建自定义表单类,一定要引入FlaskForm,其中validators为验证函数,DataRequired()验证是否为空
class LoginForm(FlaskForm):
#DataRequired()有数据就可以
username = StringField(u'用户名',validators=[DataRequired()])
password = PasswordField(u'密码',validators=[DataRequired()])
#EqualTo()判断密码是否一致
#validators = 的后面是一个列表
password2 = PasswordField(u'确认密码',validators=[DataRequired(),EqualTo('password','密码不一致')])
submit = SubmitField(u'提交')
- 建立表单
在templates文件夹里建一个html文件,其中{{ form.username.label }}为文字,{{ form.username }}为文本框。
不填{{ form.csrf_token()}}会出现错误
<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}}
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
</form>
其中flash为闪现下方会解释。在使用flask时也需要引入
from flask import Flask,render_template,flash,request
- 建立逻辑
用request,提取数据
@app.route('/',methods=['GET',"POST"])
def login():
login_form = LoginForm()
#request.method判断请求方式
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
# 验证参数
if login_form.validate_on_submit():
#login_form.validate_on_submit():函数判断输入是否正确
print (username)
return'sssssss'
else:
flash('参数有误')
return render_template('data.html',form=login_form)
提交数据时候是post方式,所以如果是post访问下就提取数据
login_form.validate_on_submit():语句判断是否正确,正确就弹出字符,错误则用flash闪现出消息有误
- SECRET_KEY
此时运行一遍代码,仍然会出错。原因是没有配置SECRET_KEY
app.config["SECRET_KEY"] = "12345678"
秘钥可以写的复杂一点
以下为全部代码
data.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}}
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
</form>
</body>
</html>
app.py
from flask import Flask,render_template,flash,request
from flask_wtf import FlaskForm
#自定义表单类
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired,EqualTo
#文本字段,密码字段
# import sys
# reload(sys)
# sys.setdefaultencoding("utf-8")
app = Flask(__name__)
app.config["SECRET_KEY"] = "12345678"
class LoginForm(FlaskForm):
#DataRequired()有数据就可以
username = StringField(u'用户名',validators=[DataRequired(message='请输入名户名')])
password = PasswordField(u'密码',validators=[DataRequired(message='请输入密码')])
#EqualTo()判断密码是否一致
#validators = 的后面是一个列表
password2 = PasswordField(u'确认密码',validators=[DataRequired(),EqualTo('password','密码不一致')])
submit = SubmitField(u'提交')
@app.route('/',methods=['GET',"POST"])
def login():
login_form = LoginForm()
#request.method判断请求方式
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
# 验证参数
if login_form.validate_on_submit():
print (username)
return'sssssss'
else:
flash('参数有误')
return render_template('data.html',form=login_form)
if __name__ == '__main__':
app.run()
本文介绍了如何在Python Flask应用中使用WTForms库创建自定义表单类,包括导入库、定义验证函数、创建HTML模板以及处理POST请求。通过设置SECRET_KEY解决表单提交的安全问题。
233

被折叠的 条评论
为什么被折叠?



