2013-02-19 191 views
3

當我作爲URL類型/login,就會出問題無法路由到「/登錄」與燒瓶?

例如:

from flask import Flask ,url_for,render_template,request 
app = Flask(__name__) 

@app.route('/login') 
def index(): 
    return "index" 

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

錯誤變成是這樣的:

Not Found. 
The requested URL was not found on the server. 

當我與/login/替換/login或任何其他字如/log,都會沒事的。這是如何發生的?

+1

運行您的示例並訪問http://127.0.0.1:5000/login對我來說工作得很好......在控制檯上顯示的內容是什麼? – pcalcao 2013-02-19 11:47:23

+0

「未找到 在服務器上找不到請求的網址 如果您手動輸入網址,請檢查拼寫並重試。 – winoi 2013-02-19 12:03:15

+1

這就是你的瀏覽器上顯示的內容,對吧?日誌怎麼樣?例如:'127.0.0.1 - - [19/Feb/2013 11:46:47]「GET/login HTTP/1.1」200 -' – pcalcao 2013-02-19 12:04:33

回答

5
+0

但爲什麼它會自動將「/ login」替換爲「/ login /」?然後瀏覽器將無法找到該頁面。 – winoi 2013-02-19 14:11:05

+0

請閱讀flask quickstart唯一URL /重定向行爲部分,它解釋了爲什麼瓶子會這樣做。 – Joe 2013-02-19 14:18:01

+0

由於您提供的代碼,我可以訪問'http://127.0.0.1:5000/login',它不會重定向到'http://127.0.0.1:5000/login /';當我嘗試訪問'http://127.0.0.1:5000/login /'時,它會報告404錯誤。它符合唯一URL /重定向行爲。 – Joe 2013-02-19 14:40:06

0

編輯

你可以turn off the strict url mode路由模塊中,得到/login/要求工作

添加以下代碼在你app = Flask(__name__)之後,並在你定義任何路由之前。

app.url_map.strict_slashes = False 

原來的答案

我的鉻是某種搞亂請求。我打開<F12>開發人員工具,發現它會自動將我的/login請求重定向到/login/

General 
Request URL:http://roxma.org:8000/hello 
Request Method:GET 
Status Code:301 MOVED PERMANENTLY (from disk cache) 
Remote Address:127.0.0.1:1080 

Request 
Content-Length:263 
Content-Type:text/html; charset=utf-8 
Date:Wed, 28 Dec 2016 14:24:44 GMT 
Location:http://roxma.org:8000/hello/ 
Server:Werkzeug/0.11.11 Python/3.5.1 

這很尷尬。我不知道如何解決這個問題。我想最好的解決方案是使用/login/風格。