【问题标题】:How to access api.url_for in big Flask-Restful API如何在大型 Flask-Restful API 中访问 api.url_for
【发布时间】:2015-05-22 14:15:04
【问题描述】:

我正在使用 Flask-Restful 开发一个 Restful API,其资源比我想要保留在我的 app.py 中的要多。所以我应用了建议的project structure。现在我想从资源访问api.url_for() 以生成一些链接,但似乎我必须from app import api 才能做到这一点。

为避免循环导入,我目前的解决方案是进行惰性导入。但是有更好的方法,对吧?

app.py:

from flask import Flask
from flask_restful import Api
from myapi.resources.foo import Foo
from myapi.resources.bar import Bar
from myapi.resources.baz import Baz

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

api.add_resource(Foo, '/Foo', '/Foo/<str:id>')
api.add_resource(Bar, '/Bar', '/Bar/<str:id>')
api.add_resource(Baz, '/Baz', '/Baz/<str:id>')

resource/foo.py(分别为bar.py):

from flask_restful import Resource
from bar import Bar

class Foo(Resource):
    def get(self):
        from app import api
        related = api.url_for(Bar, foo=self.id)
        return {'Foo':self.id, 'related_bar':related}, 200

    def post(self):
        pass

【问题讨论】:

    标签: python flask python-import flask-restful


    【解决方案1】:

    您可以将导入向下移动到api = Api(app) 行下方:

    from flask import Flask
    from flask_restful import Api
    
    app = Flask(__name__)
    api = Api(app)
    
    from myapi.resources.foo import Foo
    from myapi.resources.bar import Bar
    from myapi.resources.baz import Baz
    
    api.add_resource(Foo, '/Foo', '/Foo/<str:id>')
    api.add_resource(Bar, '/Bar', '/Bar/<str:id>')
    api.add_resource(Baz, '/Baz', '/Baz/<str:id>')
    

    现在api 名称已定义,您可以在resources 模块中安全地导入from app import api

    from flask_restful import Resource
    from app import api
    from bar import Bar
    
    class Foo(Resource):
        def get(self):
            related = api.url_for(Bar, foo=self.id)
            return {'Foo':self.id, 'related_bar':related}, 200
    
        def post(self):
            pass
    

    请参阅 Flask 文档中的 Larger Applications pattern

    【讨论】:

      猜你喜欢
      • 2016-01-16
      • 1970-01-01
      • 2018-08-09
      • 2016-03-17
      • 2014-06-13
      • 1970-01-01
      • 2020-11-28
      • 2014-09-01
      • 1970-01-01
      相关资源
      最近更新 更多