簡體   English   中英

無法使用 Flask 應用程序工廠和 Flask-Restful 添加資源

[英]Unable to add resources using a Flask Application Factory and Flask-Restful

我寫的有點絕望。 I have an application that uses 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)

如果我運行這個和 go 到 http://localhost:5000/talk 我得到 { 'msg': 'Talking' } 響應。

但是,我無法使用應用程序工廠使其工作。

我查看了 Flask 的文檔,這些文檔位於: https://flask.palletsprojects.com/en/1.1.x/patterns/appfactories/#

這是有道理的。 但是,我無法讓 url 工作。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM