Python-flask的wtf表单应用

本文介绍了如何在Python Flask应用中使用WTForms库创建自定义表单类,包括导入库、定义验证函数、创建HTML模板以及处理POST请求。通过设置SECRET_KEY解决表单提交的安全问题。

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值