1 python python-import flask flask-restful
我正在使用 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>')
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
您可以将导入向下移动到该线下方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>')
Run Code Online (Sandbox Code Playgroud)
现在api名称已经定义,您可以安全地导入from app import api您的resources模块:
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
Run Code Online (Sandbox Code Playgroud)
请参阅Flask 文档中的大型应用程序模式。
| 归档时间: |
|
| 查看次数: |
3173 次 |
| 最近记录: |