簡體   English   中英

如何在api路由處理程序中共享flask-pymongo實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM