[英]Flask: How do I get the returned value from a function that uses @app.route decorator?
[英]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
參數,則默認值為僅接受GET
和HEAD
請求(*) 。
僅在需要接受其他HTTP方法 (例如POST
時才需要顯式設置methods
,否則當客戶端使用您未列出的HTTP方法和route函數時,Flask將以405 Method Not Allowed HTTP響應代碼進行響應根本不被調用。
因此,如果您的路由應同時處理GET
和POST
請求,但又忘記在@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.