【问题标题】:Flask app doesn't recognize flask_restful resourcesFlask 应用程序无法识别 flask_restful 资源
【发布时间】:2021-03-15 03:33:05
【问题描述】:

我正在尝试使用 flask_restful 构建 API,但我不知道如何将继承自 Resource 的类与实际应用程序连接起来。 我有以下结构

  page
    ├───api
    │   └───__init__.py
    │   └───resources.py          
    └───__init__.py

页面/api/resources.py:

from flask_restful import Resource
from page import api


@api.resource("/hello-world")
class HelloWorld(Resource):
    def get(self):
        return {"hello": "World"}

page/init.py:

from flask import Flask
from flask_restful import Api

from page.config import Config1

api = Api()

def create_app(config_class=Config1):
    app = Flask(__name__)
    app.config.from_object(config_class)

    api.init_app(app)

    return app

run.py(页面包外):

from page import create_app

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

测试:

import requests

BASE = "http://127.0.0.1:5000/"

response = requests.get(BASE + "hello-world")
print(response.json())

显然,向“/hello-world”发出请求是行不通的。我怎样才能“让 Flask 知道”这些资源,以便我得到有效的响应。

【问题讨论】:

    标签: python api flask flask-restful


    【解决方案1】:

    可能有一个非常聪明的方法可以做到这一点,但对我来说,解决方案是删除 page/api/resources.py 的装饰器 @api.resource 装饰器并在 page/init.py 进行以下更改

    from flask import Flask
    from page.config import Config1
    
    def create_app(config_class=Config1):
        app = Flask(__name__)
        app.config.from_object(config_class)
    
        return app
    

    我还将根据 Flask 文档将 run.py 移动到 page 文件夹中并将其重命名为 app.py。这个app.py 应该有你的路线,所以把它改成这样:

    from page import create_app
    from page.api.resources import HelloWorld
    from flask_restfull import api
    
    app = create_app()
    api = Api(app)
    api.add_resource(HelloWorld, '/hello-world')
    

    要运行它,只需在 page 文件夹中输入 flask run

    【讨论】:

    • 是的。这样更好。
    • 没关系,但它没有通过问题中的测试。它返回一个 404 响应对象
    • 添加到这个答案,删除 api = Api() 和 api.init_app(app),并在 create_app 函数中使用 api = Api(app) 更改它已解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多