无法使用烧瓶路由到“/ 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”?的主要内容,如果未能解决你的问题,请参考以下文章

烧瓶装饰器:无法从 URL 传递参数

无法使用烧瓶邮件python将附件添加到邮件

使用类创建的数据无法通过烧瓶应用程序显示到 html 中

无法使用获取API将表单数据发布到烧瓶

使用烧瓶登录对烧瓶进行单元测试时禁用@login_required

React Router 无法渲染路由