1. 程式人生 > >Flask ~~“一見鍾情之初體驗”(Web表單)

Flask ~~“一見鍾情之初體驗”(Web表單)

之前我們講了Flask中的過濾  繼承  包含  巨集   今天來說說表單,說起表單大家都不陌生吧,在html中form表單一般用於採集資料和提交資料,在Flask中當然也有表單,現在就說說Flask中的表單的簡單應用。

在說表單前給大家先說一下Flask中的訊息閃現

Flash中的訊息閃現,在官方的解釋是用來給使用者做出反饋。不過實際上這個功能只是一個記錄訊息的方法,在某一個請求中記錄訊息,在下一個請求中獲取訊息,然後做相應的處理,也就是說flask只存在於兩個相鄰的請求中“閃現”,第三次請求就不存在這個flash了。

通常情況下配合模板系統進行呼叫,可以實現一種偽”ajax”請求的效果

基於 flash 模組

from flask import flash

模板輸出flash

 

Web 表單是 Web 應用程式的基本功能。

它是HTML頁面中負責資料採集的部件。表單有三個部分組成:表單標籤、表單域、表單按鈕。表單允許使用者輸入資料,負責HTML頁面資料採集,通過表單將使用者輸入的資料提交給伺服器。

在Flask中,為了處理web表單,我們可以使用 Flask-WTF 擴充套件,它封裝了 WTForms,並且它有驗證表單資料的功能。

直接上程式碼了,程式碼中有相應的註釋和注意事項:

使用 html 自帶的表單

建立模板檔案如: login.html,在其中直接寫form表單:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>flask普通表單提交資料,使用flask訊息閃現來將反饋顯示給使用者</title
> </head> <body> <h1> 使用者註冊</h1> <br> {# action屬性。如果不寫 預設提交給自己 methodsh屬性 來指定表單的提交方式#} <form method="post"> <lable> 使用者名稱</lable> {# from 提交資料通過name選擇器來提交#} <input type="text" name="username" placeholder="請輸入使用者名稱"> <br> <label>密碼</label> <input type="password" name="password"> <br> <label>確認密碼</label> <input type="password" name="password1"> <br> {# 將flask 訊息閃現和後臺聯絡起來 #} {# 將訊息閃現裡面的所有訊息遍歷,取出需要返回給使用者的訊息#} {% for message in get_flashed_messages() %} {{ message }} {% endfor %} <input type="submit" value="註冊"> </form> </body> </html>

當然這只是簡單的表單寫入,還需要寫一個py檔案把它們聯絡起來。具體如下:

# -*- encoding: utf-8 -*-
#flask 的訊息閃現以來與flask庫,使用者傳送的請求方式儲存在requests模組中
from flask import Flask,flash,render_template,request

#匯入wtf擴充套件的表單類
from flask_wtf import FlaskForm
#匯入自定義表單需要用到的欄位型別
from wtforms import SubmitField,StringField,PasswordField

#新建一個表單類

class RegisterFrom(FlaskForm):
    username=StringField('使用者名稱')
    password=PasswordField('密碼')
    password1=PasswordField('確認密碼')
    submit=SubmitField('註冊')

#建立物件
app = Flask(__name__)

#載入配置檔案

app.config.from_pyfile('config.ini')

@app.route ('/',methods=['POST','GET'])
def index ():
    #判斷client傳送的請求型別
    #在自己請求自己的邏輯中,GET只用於來解析模板,而POST用來判斷資料邏輯
    if request.method == 'POST':
        #使用form屬性來接收表單提交過來的資料
        username=request.form.get('username')
        password=request.form.get('password')
        password1=request.form.get('password1')

        #等同於 if username == "" or password == "" or password1 ==""
        if not all([username,password,password1]):
            #利用閃現訊息來提醒使用者
            flash('引數缺少')
        elif password !=password1:
            flash('密碼不一致')
        else:
            flash('註冊成功')
            return '成功'
                


    
    #將定義號的表單類傳遞給模板,進行方法化設定
    return render_template('day4_wtform.html',form=RegisterFrom())

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