Flask-PyMongo与应用工厂和蓝图

时间:2018-02-06 22:38:16

标签: python mongodb flask

我正在尝试使用蓝图和应用程序工厂实现Flask-PyMongo并继续获取AttributeError:'Flask'对象没有属性'db' 我的目录结构类似于

myapp/
   myapp.py
   config.py
   /app
       __init__.py
       /v1
             __init__.py
             endpoints.py

在我启动Flask应用程序的python脚本中:

import os
from app import create_app

app = create_app('dev')

在我的顶级 init .py我有:

mongo = PyMongo()

def create_app(config_name):
    app = Flask(__name__)
    mongo.init_app(app)
    app.config.from_object(config[config_name])

    from app.v1 import psapi as psapi_bp
    app.register_blueprint(psapi_bp, url_prefix='/api')

    if not os.path.exists('logs'):
        os.mkdir('logs')

在我的endpoints.py中,我有一条看起来像

的路线
@myapp.route('/addentry', methods=['POST'])
def addentry():
    username = request.json['username']
    userid = current_app.db.user_entry.insert({'username':username})
    return jsonify({'userid':userid})

我觉得我有一些小东西,但是我没有看到它。

2 个答案:

答案 0 :(得分:1)

您需要在db对象上致电mongo,而不是app对象

答案 1 :(得分:1)

对于可能再次遇到此问题的人:

  • 您应该首先定义mongo oustside create_app才能从其他文件内部对其进行访问。
  • 然后使用类似以下内容的init_app:

从烧瓶进口烧瓶,current_app

from flask_pymongo import PyMongo

mongo = PyMongo()

def create_app(config_name):
    app = Flask(__name__, instance_relative_config=False)

    app.config.from_object(app_config[config_name])

    # INIT EXTENSIONS ----------------------

    mongo.init_app(app)

    return app

然后在任何文件中,您都可以从上述文件中导入mongo。例如:

from ../factory import mongo