[英]How to share a flask-pymongo instance in the api routes handler
我正在嘗試使用flask,flask-restplus和flask-pymongo設計一個簡單的api,但是我正面臨一種結構設計,基於導入和變量共享,我無法以任何方式訪問數據庫。
這是我的主機文件中的代碼:
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實現中訪問數據庫實例:
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
我已經嘗試解決很長時間了,因為我認為這不是結構性決定的愚蠢之舉,但我可能是錯的。 結構或導入方面的哪些方法可以幫助解決此問題?
先感謝您!
有多種方法可以構建Flask應用程序,以實現輕松的資源共享。 但是,我傾向於將資源綁定到通常是應用程序包的通用包,以便其他模塊可以從該包導入資源。
假設我們有一個名為demo的虛擬項目,其結構如下:
.
├── api
│ ├── __init__.py
│ └── namespace1.py
└── demo
├── __init__.py
├── main.py
└── setup.py
請注意,我們將api單獨作為自己的包。
這是各個模塊內容的簡要說明。
演示/ __ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.