【问题标题】:404 when accessing resource Flask-Restful访问资源 Flask-Restful 时出现 404
【发布时间】:2017-04-02 00:31:04
【问题描述】:
from flask import g, request, session, render_template, flash, redirect, url_for
from flask import current_app as app

@app.route('/')
def home():
    return 'this works'


from flask_restful import Resource, Api
from app.extensions import api


class HelloWorld(Resource):
    def get(self):
        return {'Hello': 'World'}

api.add_resource(HelloWorld, '/test')  # Getting a 404 for this route on http://127.0.0.1:5000/test

Extensions 设置 api 变量:

api = Api()
api.init_app(app)

我无法弄清楚为什么在尝试访问 api 资源时会收到 404?

【问题讨论】:

  • 你试过带参数吗?
  • 或者,您的示例在没有参数的情况下完成(与您的 add_resource 匹配),它似乎可以按预期工作。 pastebin.com/yJy7F2At
  • 抱歉,我用文档中的一些代码替换了我更复杂的代码并忘记了参数。我已经更新了我的代码,但问题仍然存在。
  • 问题是您显示的代码没有重现您所描述的问题。你应该写一个minimal reproducible example
  • 是的,确实如此,只需将 api = Api(app) 替换为我上面的操作方式(延迟 init_app),您就会遇到同样的问题。无论如何,我在下面回答了我的问题。

标签: python flask http-status-code-404 flask-restful


【解决方案1】:

好的,问题似乎是下面的顺序是错误的。我必须在初始化 api 之前添加资源。

api = Api()
api.init_app(app)
api.add_resource(HelloWorld, '/')

修复:

api = Api()
api.add_resource(HelloWorld, '/')
api.init_app(app)

这很奇怪,例如SQLAlchemy在使用前需要调用init_app...

【讨论】:

  • 你可以这样做app = Flask(__name__) api = Api(app) api.add_resource(HelloWorld, '/test')(根据文档)。
  • 在我的代码中,由于我使用的是应用程序工厂,它们并没有挨在一起
  • 也在使用应用程序工厂并且正要惩罚我的笔记本电脑,直到我找到这个答案。谢谢!!
  • 有效地在文档中修复是他们建议的方式。 flask-restful.readthedocs.io/en/latest/…
  • 非常感谢你,救了我的培根。我以为我把这一切都搞砸了。
猜你喜欢
  • 2018-08-09
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2014-09-25
相关资源
最近更新 更多