# Flask實作_基礎_07_POST and GET ###### tags: `python` `flask` 在flask定義`app.route('你的路由')`的時候,有幾個參數可以設置,其中`methods`是用來定義這個路由是否執行相關的`GET`、`POST`...來看看怎麼設置。 ## 作業說明 在HTTP中有八種Method,其中四種常見的Method為GET、POST、UPDATE、DELETE,這不屬flask的範疇,不會多談<sub>(因為在下也沒有足夠的能力談)</sub>,我們要討論的是如何在flask中設置。 使用者端會提出一個請求稱為`request`,這些資訊都可以透過瀏灠器的開發者工具看的到,大概幾種狀況: * 取得資訊的時候`GET` * 送出資訊的時候`POST` * 更新資訊的時候`UPDATE` * 刪除資訊的時候`DELETE` 相對的,在flask處理這些資訊的就是`request`,這是flask的自帶函數 ```python= from flask import request ``` 假設我們要設計一個login的頁面來接收使用者的登入帳號密碼,接著回傳一個歡迎的訊息給使用者。 我們先來設置Python文件,請依個人的喜好設置檔案名稱即可 ```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文件,執行專案測試。 登入畫面如下: ![](https://i.imgur.com/a2CcY8C.png) 點擊Submit: ![](https://i.imgur.com/6KO5t2d.png) 下圖是透過chrome去查看你的request的資料: ![](https://i.imgur.com/WDRst3p.png) ## 總結 透過這次的討論我們瞭解到如何利用flask的自帶函數`request`來補捉由Client端所傳過來的資料,以及如何去判斷是否為`POST`的動作,這在表單設計上非常實用,因為我們在路由設置上會需要`GET`的時候回傳空白表單,而`POST`的時候將回傳資料寫入資料庫。 另外,在沒有特別設置`methods`情況下預設為允許`GET`,後續我們的專案較常用到的也只有`GET`與`POST`,我們繼續往下一步前進吧。 **上一話:**[Flask實作_基礎_06_render_template + 參數](https://hackmd.io/s/SJpXnBTez) **下一話:**[Flask實作_基礎_08_form action url_for](https://hackmd.io/s/Bk2QpUAlG)