无法使用烧瓶路由到“/ login”?
Posted
技术标签:
【中文标题】无法使用烧瓶路由到“/ login”?【英文标题】:Can't route to "/login" with flask? 【发布时间】:2013-02-04 02:02:33 【问题描述】:当我输入/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
的词时,就可以了。这是怎么发生的?
【问题讨论】:
运行您的示例并访问 127.0.0.1:5000/login 对我来说效果很好...您的控制台上显示了什么? "未找到服务器上未找到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。" 这就是您浏览器上显示的内容,对吧?日志呢?类似:127.0.0.1 - - [19/Feb/2013 11:46:47] "GET /login HTTP/1.1" 200 -
127.0.0.1 - - [19/Feb/2013 20:11:21] "GET /login/ HTTP/1.1" 404 - "/" 在 "login" 后自动添加。只是在“登录”之后会添加“/”。我不知道为什么。
【参考方案1】:
编辑
您可以在路由模块中使用turn off the strict url mode,以使/login/
请求正常工作
在app = Flask(__name__)
之后和定义任何路由之前添加以下代码。
app.url_map.strict_slashes = False
原答案
我的 chrome 以某种方式弄乱了请求。我打开<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/
样式。
【讨论】:
【参考方案2】:请阅读flask quickstart 唯一网址/重定向行为、URL canonicalization 和Trailing slash in URLs - which style is preferred?
【讨论】:
但为什么它会自动将“/login”替换为“/login/”?然后浏览器将找不到该页面。 请阅读flask quickstart Unique URLs / Redirection Behavior部分,它已经解释了flask这样做的原因。 对于你给出的代码,我可以访问http://127.0.0.1:5000/login
,它不会重定向到http://127.0.0.1:5000/login/
;当我尝试访问http://127.0.0.1:5000/login/
时,它会报告 404 错误。它符合唯一 URL / 重定向行为。
现在好了。 “127.0.0.1:5000/login”记录在浏览器中,所以当我输入“127.0.0.1:5000/login”时,它会添加“/”。困扰我的是浏览器。感谢您的帮助。以上是关于无法使用烧瓶路由到“/ login”?的主要内容,如果未能解决你的问题,请参考以下文章