web表单是web应用程序的基本功能

它是HTML页面中负责数据采集的不见。表单有三个部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。

在Flask中,为了处理web表单,我们一般使用Flask-WTF扩展,它封装了WTForms,并且它有验证表单数据的功能

没有使用WTF的后端代码


from flask import Flask,render_template,request
app = Flask(__name__)

'''
目的:实现一个简单的登陆的逻辑处理
1.路由需要有get和post两种请求方式 -->需要判断请求方式
2.获取请求的参数
3.判断参数是否填写,以及密码是否相同
4.如果判断都没有问题,就返回一个success
'''
'''
给模版传递消息 
flash ---> 需要对内容加密,需要设置secret_key,做加密消息的混淆
模板中需要遍历消息
'''
app.secret_key = 'sunwenbo'

@app.route('/wtf',methods=['GET','POST'])
def wtf():
    #request:请求对象--->获取请求方式、数据
    #1.判断请求方式
    if request.method == 'POST':
        #2.获取请求的参数
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')
        print username
        #3.判断参数是否填写,以及密码是否相同
        if not all([username,password,password2]):
            #解决编码问题u
            flash(u'参数不完整')
            #print '参数不完整'
        elif password != password2:
            flash(u'密码不一致')
            #print '密码不一致'
        else:
            return 'success'
    return render_template('wtf.html')

if __name__ == '__main__':
    app.run()

没有使用WTF的前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WTF表单</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="提交">

{# 使用遍历获取闪现的消息 #}
    {% for message in get_flashed_messages() %}
        {{ message }}
    {% endfor %}

</form>

</body>
</html>
使用WTF后端代码

from flask import Flask,render_template,request,flash
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__)

'''
使用WTF实现表单
1.自定义表单类
'''

class LoginForm(FlaskForm):
    username = StringField('用户名:',validators=[DataRequired()])
    password = PasswordField('密码:',validators=[DataRequired()])
    password2 = PasswordField('确认密码:',validators=[DataRequired(),EqualTo('password','密码填入的不一致')])
    submit = SubmitField('提交')

@app.route('/form',methods=['GET','POST'])
def login():
    login_form = LoginForm()
    # 1. 判断请求方式
    if request.method == 'POST':
        # 2. 获取请求参数
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')
        # 3. 验证参数,WTF可以一句话就实现所有的校验
        # 我们没有CSRF token,使用WTF会考虑更高的安全性
        if login_form.validate_on_submit():
            print username,password
            return 'success'
        else:
            flash('参数有误')
    return render_template('wtf.html',form=login_form)

if __name__ == '__main__':
    app.run()
使用WTF前端代码

<form method="post">
    {# 开启csrf token #}
    {{ form.csrf_token() }}
    {{ form.username.label }}{{ form.username }} <br>
    {{ form.password.label }}{{ form.password }} <br>
    {{ form.password2.label }}{{ form.password2 }} <br>
    {{ form.submit }}
</form>