首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在api路由处理程序中共享烧瓶-pymongo实例

如何在api路由处理程序中共享烧瓶-pymongo实例
EN

Stack Overflow用户
提问于 2018-01-18 15:08:33
回答 1查看 812关注 0票数 2

我正在尝试使用烧瓶、烧瓶-restplus和烧瓶-pymongo来设计一个简单的api,但是我面临一个结构设计,基于导入和变量共享,我无法以任何方式访问db。

以下是我的主引擎文件中的代码:

代码语言:javascript
复制
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实例:

代码语言:javascript
复制
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"

我得到以下错误。

代码语言:javascript
复制
ImportError: cannot import name engine

我已经尝试了很长一段时间来解决这个问题,因为我不认为这是一个愚蠢的结构性决定,但我可能错了。无论是结构性的还是进口式的,哪种方式可以帮助解决这个问题?

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-20 19:53:40

有各种各样的方法来架构您的烧瓶应用程序,以便于资源共享。不过,我倾向于将资源绑定到公共包(通常是应用程序包),以便其他模块可以从该包中导入资源。

假设我们有一个名为demo的虚拟项目,其结构如下:

代码语言:javascript
复制
.
├── api
│   ├── __init__.py
│   └── namespace1.py
└── demo
    ├── __init__.py
    ├── main.py
    └── setup.py

注意到,单独作为自己的包使用。

以下是对各个模块内容的简要描述。

demo/__init__.py

代码语言:javascript
复制
db = None # initials package level name to None. 

演示/setup.py

代码语言:javascript
复制
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

代码语言:javascript
复制
from demo.setup import app
from api import register_api

register_api(app)

if __name__ == '__main__':
     app.run()

我们的API可以很容易地从demo导入:

api/namespace1.py

代码语言:javascript
复制
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

您可以查看这里完整的样本

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48324405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档