Try   HackMD

Flask實作_基礎_07_POST and GET

tags: python flask

在flask定義app.route('你的路由')的時候,有幾個參數可以設置,其中methods是用來定義這個路由是否執行相關的GETPOST來看看怎麼設置。

作業說明

在HTTP中有八種Method,其中四種常見的Method為GET、POST、UPDATE、DELETE,這不屬flask的範疇,不會多談(因為在下也沒有足夠的能力談),我們要討論的是如何在flask中設置。

使用者端會提出一個請求稱為request,這些資訊都可以透過瀏灠器的開發者工具看的到,大概幾種狀況:

  • 取得資訊的時候GET
  • 送出資訊的時候POST
  • 更新資訊的時候UPDATE
  • 刪除資訊的時候DELETE

相對的,在flask處理這些資訊的就是request,這是flask的自帶函數

from flask import request

假設我們要設計一個login的頁面來接收使用者的登入帳號密碼,接著回傳一個歡迎的訊息給使用者。
我們先來設置Python文件,請依個人的喜好設置檔案名稱即可

from flask import Flask, request app = Flask(__name__) @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': return 'Hello ' + request.values['username'] return "<form method='post' action='/login'><input type='text' name='username' />" \ "</br>" \ "<button type='submit'>Submit</button></form>" if __name__ == '__main__': app.debug = True app.run()

第5行:利用methods來設置這個路由允許的方式,如果沒有設置POST那使用者點擊之後會有異常訊息告知該路由不支援POST
第7行:利用request來補捉使用者端的動作是否為POST,如果是POST就代表是使用者端透過submit所提交過來的資料。
第8行:透過request.values['username'],我們可以取得從form過來的username欄位資料。
第10行:注意到action='/login',這種寫法是不好的,未來如果我們有變更路由名稱,這邊也要跟著調整了,建議作法是使用url_for

我們直接在Python文件中硬刻簡單的HTML語法,所以不需要再另外設置HTML文件,執行專案測試。

登入畫面如下:

點擊Submit:

下圖是透過chrome去查看你的request的資料:

總結

透過這次的討論我們瞭解到如何利用flask的自帶函數request來補捉由Client端所傳過來的資料,以及如何去判斷是否為POST的動作,這在表單設計上非常實用,因為我們在路由設置上會需要GET的時候回傳空白表單,而POST的時候將回傳資料寫入資料庫。

另外,在沒有特別設置methods情況下預設為允許GET,後續我們的專案較常用到的也只有GETPOST,我們繼續往下一步前進吧。

上一話:Flask實作_基礎_06_render_template + 參數
下一話:Flask實作_基礎_08_form action url_for