Flask WEB表單-WTF簡單使用

web表單是web應用程序的基本功能html

它是HTML頁面中負責數據採集的不見。表單有三個部分組成:表單標籤、表單域、表單按鈕。表單容許用戶輸入數據,負責HTML頁面數據採集,經過表單將用戶輸入的數據提交給服務器。前端

在Flask中,爲了處理web表單,咱們通常使用Flask-WTF擴展,它封裝了WTForms,而且它有驗證表單數據的功能web

沒有使用WTF的後端代碼flask

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>
相關文章
相關標籤/搜索