# 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文件,執行專案測試。 登入畫面如下:  點擊Submit:  下圖是透過chrome去查看你的request的資料:  ## 總結 透過這次的討論我們瞭解到如何利用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)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.