如何解决无法使用 Flask 应用程序工厂和 Flask-Restful 添加资源
我写的有点绝望。我有一个使用 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、数据库和其他东西就没有机会了!
提前致谢。
解决方法
我遇到了同样的问题。您必须在初始化之前绑定资源,如下所示:
from resources.talk import Talk
api.add_resource(Talk,'/talk')
api.init_app(app)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。