繁体   English   中英

如何在Flask-Restful API中访问api.url_for

[英]How to access api.url_for in big Flask-Restful API

我正在使用Flask-Restful开发一个Restful API,它提供了比我想保留在app.py中更多的资源。 因此,我已经采用了建议的项目结构 现在,我想从资源访问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

您可以将导入向下移动到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文档中的“ 较大的应用程序”模式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM