【问题标题】:Webserver/Flask: Why does an empty url part resolve to the root?Webserver/Flask:为什么一个空的 url 部分解析为根?
【发布时间】:2015-09-17 18:45:45
【问题描述】:

我在我的烧瓶应用程序中使用Restless。我制作了一个 API 资源,执行如下操作...

from restless.fl import FlaskResource

class WidgetResource(FlaskResource):
    preparer = FieldsPreparer(fields={
        'id': 'id',
        'name': 'name' 
    }

    ...

WidgetResource.add_url_rules(app, rule_prefix='/api/widgets/') 

资源定义了一个列表和详细视图,尽管它们没有在上面显示。如有必要,我可以包括在内。现在来回答这个问题。在生产中,我注意到这条路线......

/api/widgets//

返回与...相同的结果(尽管没有重定向到它)

/api/widgets/

也就是说,它是一个 200 结果,显示了小部件的列表视图。但是,对于我的开发服务器,第一个路由会产生 404,就好像它正在访问详细视图,就像我所期望的那样,并传递了一个空的主键。什么会导致我的 prod 服务器与 dev 服务器上的这种行为差异?

需要明确的是,开发服务器的行为是我想要实现的。

【问题讨论】:

  • 每台服务器上的操作系统是什么?在 Linux/UNIX 系列下,多余的斜杠会被忽略。
  • 你在生产中使用什么服务器(我假设你在开发中使用app.run)?

标签: python api rest flask webserver


【解决方案1】:

从 url 前缀中删除尾部斜杠。

WidgetResource.add_url_rules(app, rule_prefix='/api/widgets')

规则通常包含一个前导斜杠,因此添加尾部斜杠会创建您所看到的两个斜杠行为。 Flask/Werkzeug 在幕后做了一些事情来处理可选的尾部斜杠,所以这就是它们仍然正确重定向的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多