Flask ~~“一見鍾情之初體驗”(Web表單)
阿新 • • 發佈:2018-12-25
之前我們講了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()