簡體   English   中英

我需要在@ app.route()中使用method = ['GET','POST']嗎?

[英]Do I need to use methods=['GET', 'POST'] in @app.route()?

我的表單通過GET發送age參數,它可以這樣工作:

@app.route("/foo")
def foo():
  age = request.args['age']

我沒有打擾

@app.route('/foo', methods=['GET', 'POST'])

有關系嗎?

沒關系,從某種意義上說它將起作用。 但是通常情況下,您希望具有多個功能來完成類似的事情。 POST到/ foo,表示添加一個元素,GET到/ foo,表示檢索元素,DELETE到/ foo,表示刪除元素。

如果未為app.route()指定methods參數,則默認值為僅接受GETHEAD請求(*)

僅在需要接受其他HTTP方法 (例如POST時才需要顯式設置methods ,否則當客戶端使用您未列出的HTTP方法和route函數時,Flask將以405 Method Not Allowed HTTP響應代碼進行響應根本不被調用。

因此,如果您的路由應同時處理GETPOST請求,但又忘記在@route()上添加methods=['GET', 'POST'] ,則可能會出現錯誤,因為POST請求會導致405響應而不是您的響應路由處理請求。

在你的情況,但是,你應該使用methods=['GET', 'POST']而是讓客戶嘗試使用POST反正知道你的路線不處理方法。 明確指出錯誤總比讓它靜默通過更好。


(*)每當您使用注冊處理GET的路由時,都會添加HEAD ;如果發生HEAD請求,則會調用您的路由,然后僅將標頭提供給客戶端。 Flask會自動為您處理OPTIONS ,在這種情況下不會調用該路由。

與往常一樣,答案是:取決於情況。

如果您不提供“方法”參數,則Flask會假定HTTP方法為GET(並且也接受HEAD)。 只要該假設有效,您的代碼就可以正常工作。

但是,如果您的網頁是以POST方法(或DELETE等)進行通信的,則Flask將失敗並抱怨不允許POST(或DELETE等)請求。

將此要求視為冗余檢查。 可以編寫Flask來適應HTTP請求中使用的任何方法。 相反,Flask堅持要求您將方法指定為有意進行通信的信號。 這項要求使Flask的實現變得簡單一些,但要付出協調程序員與客戶-服務器接口的責任。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM