我正在尝试使用烧瓶、烧瓶-restplus和烧瓶-pymongo来设计一个简单的api,但是我面临一个结构设计,基于导入和变量共享,我无法以任何方式访问db。
以下是我的主引擎文件中的代码:
app = Flask(__name__)
db = PyMongo(app)
api = Api(app)
from auth import namespace as ns1
api.add_namespace(registerNamespace.api)
if __name__ == '__main__':
api.run()但同时,我想在实际的api实现中访问db实例:
from engine import engine
api = Namespace('register', description="Registration")
db = engine.db
@api.route('/whatever')
Class Whatever():
def get(self):
db.doSomething();
return "Simple getter"我得到以下错误。
ImportError: cannot import name engine我已经尝试了很长一段时间来解决这个问题,因为我不认为这是一个愚蠢的结构性决定,但我可能错了。无论是结构性的还是进口式的,哪种方式可以帮助解决这个问题?
提前谢谢你!
发布于 2018-01-20 19:53:40
有各种各样的方法来架构您的烧瓶应用程序,以便于资源共享。不过,我倾向于将资源绑定到公共包(通常是应用程序包),以便其他模块可以从该包中导入资源。
假设我们有一个名为demo的虚拟项目,其结构如下:
.
├── api
│ ├── __init__.py
│ └── namespace1.py
└── demo
├── __init__.py
├── main.py
└── setup.py注意到,单独作为自己的包使用。
以下是对各个模块内容的简要描述。
demo/__init__.py
db = None # initials package level name to None. 演示/setup.py
from flask import Flask
from flask_pymongo import PyMongo
import demo
app = Flask('demo')
demo.db = PyMongo(app) # Here is where we bind the shared resource to the package level name.演示/main.py
from demo.setup import app
from api import register_api
register_api(app)
if __name__ == '__main__':
app.run()我们的API可以很容易地从demo导入:
api/namespace1.py
from flask_restplus import Namespace, Resource, fields
from demo import db # Look ma!, it's easy to share resources.
...
@ns.route('/')
class CatList(Resource):
@ns.doc('list_cats')
@ns.marshal_list_with(cat)
def get(self):
'''List all cats'''
print(db)
return CATS您可以查看这里完整的样本。
https://stackoverflow.com/questions/48324405
复制相似问题