【问题标题】:Unable to add resources using a Flask Application Factory and Flask-Restful无法使用 Flask 应用程序工厂和 Flask-Restful 添加资源
【发布时间】:2021-01-09 21:14:01
【问题描述】:

我写的有点绝望。我有一个使用 Flask、Flask Restful、JWT、Flask SQLAlchemy 的应用程序。

这是一个相当大的个人项目,并且缺乏单元测试 - 所以我一直在使用 pytest 和 tox 添加单元测试。

我意识到要正确地做到这一点,我需要离开

from flask import Flask
app = Flask(__name__)

使用应用程序工厂,以便我可以轻松设置不同的环境。我完全被困住了,感觉有点愚蠢。为了获得帮助并显示问题,我将事情简化为:

“旧”方式:

resources/talk.py:

from flask_restful import Resource

class Talk(Resource):
    def get(self):
        return { 'msg' : 'Talking' }

app.py:

from flask import Flask
from flask_restful import Api
from resources.talk import Talk

app = Flask(__name__)
api = Api(app)

api.add_resource(Talk, '/talk')

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

如果我运行它并转到 http://localhost:5000/talk 我会得到 { 'msg' : 'Talking' } 响应。

但是,我无法使用应用程序工厂使其工作。

我查看了来自 Flask 的文档,这些文档位于:https://flask.palletsprojects.com/en/1.1.x/patterns/appfactories/#

这是有道理的。但是,我无法让网址正常工作。

app_factory.py:

from flask import Flask
from flask_restful import Api

api = Api()

def create_app():
    app = Flask(__name__)    
    api.init_app(app)
    
    from resources.talk import Talk

    api.add_resource(Talk, '/talk')

    return app

run.py:

from app_factory import create_app
app = create_app()

127.0.0.1 - - [09/Jan/2021 22:07:09] "GET /talk HTTP/1.1" 404

我也尝试过使用


def create_app():
    app = Flask(__name__)    
    api.init_app(app)
    
    from resources.talk import Talk
    with app.app_context():
        api.add_resource(Talk, '/talk')

    return app

但意识到我只是在猜测而不是理解。

有人对如何正确设置有任何指示吗?如果我不能让它工作,那么 JWT、数据库和其他东西就没有机会了!

提前谢谢你。

【问题讨论】:

    标签: python flask flask-restful


    【解决方案1】:

    我遇到了同样的问题。您必须在初始化之前绑定资源,如下所示:

    from resources.talk import Talk
    api.add_resource(Talk, '/talk')
    api.init_app(app)
    

    【讨论】:

      猜你喜欢
      • 2014-09-25
      • 2020-09-26
      • 1970-01-01
      • 2017-08-01
      • 2013-12-08
      • 2017-11-23
      • 2020-03-03
      • 2014-06-20
      • 1970-01-01
      相关资源
      最近更新 更多