2014-07-01 88 views
1

我的應用程序經常將URL編碼字符串作爲URL參數。通常這些字符串看起來像帶有斜槓的路徑。 IE /file/foo。在燒瓶中,我有一個端點,它接受一個路徑參數,我發送一個URL編碼路徑。所以,我有東西,看起來像:Python燒瓶 ​​- URL編碼導致斜槓導致404或405

http://localhost:5000/blah/cats%2F 

returns: 

GOT: cats/ 

但隨着%2F領先斜線失敗,並在GET的情況下,404和405中:

import flask 
app = flask.Flask("Hello World") 

@app.route("/blah/<path:argument>", methods=["GET"]) 
def foo(argument): 
    return "GOT: %s" % argument 

if __name__ == "__main__": 
    app.run(debug=True) 

如果我訪問這個URL這個偉大的工程POST的情況。換句話說,這404:

http://localhost:5000/blah/%2Fcats 

在我對這個問題的研究,我帶領相信here該URL編碼足以唯一的問題。然而,看起來並非如此。要解決這個問題沒有定義自己的PathConverter

+0

恐怕我對使用URL編碼的建議不正確。 Mea Culpa。 –

回答

0

一種方式是一種有兩個路由過濾器:

import flask 
app = flask.Flask("Hello World") 

@app.route("/blah/<path:argument>", methods=["GET"]) 
@app.route("/blah//<path:argument>", methods=["GET"]) 
def foo(argument): 
    return "GOT: %s" % argument 

if __name__ == "__main__": 
    app.run(debug=True) 

與達不到這個:

http://localhost:5000/blah/%2Fcats 

給我:

GOT: cats 

而且與:

http://localhost:5000/blah//cats 

給我:

GOT: cats 

但是一個更好的(清潔劑)的解決方案可能是在此描述,回答了一句:Flask route using path with leading slash

+0

當然,這並不能解決'%2F%2Fcats'的問題。 – davidism

+0

非常正確,它看起來像這可能更合適:http://stackoverflow.com/questions/24000729/flask-route-using-path-with-leading-slash#24001029 –