[英]How to access api.url_for in big Flask-Restful API
I'm working on a Restful API using Flask-Restful with more resources than I'd like to keep in my app.py. 我正在使用Flask-Restful开发一个Restful API,它提供了比我想保留在app.py中更多的资源。 So I've applied the suggested project structure . 因此,我已经采用了建议的项目结构 。 Now I'd like to access api.url_for() from a resource to generate some links, but it seems I'd have to from app import api
to do that. 现在,我想从资源访问api.url_for()来生成一些链接,但是看来我必须from app import api
来做到这一点。
To avoid circular imports, my current solution is to do a lazy import. 为了避免循环导入,我目前的解决方案是进行惰性导入。 But there has be a better way, right? 但是有更好的方法吧?
app.py
: 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
respectively): 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
You can move your imports down , to below the api = Api(app)
line: 您可以将导入向下移动到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>')
Now the api
name has been defined and you can safely import from app import api
in your resources
modules: 现在已经定义了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
See the Larger Applications pattern in the Flask documentation. 请参阅Flask文档中的“ 较大的应用程序”模式 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.