【问题标题】:Flask-PyMongo with application factory and blueprints带有应用程序工厂和蓝图的 Flask-PyMongo
【发布时间】:2018-07-17 02:42:00
【问题描述】:

我正在尝试使用蓝图和应用程序工厂实现 Flask-PyMongo,并不断收到 AttributeError: 'Flask' object has no attribute '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})

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

【问题讨论】:

  • 你修复了什么?你能更新吗

标签: python mongodb flask


【解决方案1】:

您需要在 mongo 对象上调用 db,而不是在 app 对象上调用

【讨论】:

  • 谢谢!我还注意到我在设置配置之前初始化了我的 mongo 对象。
【解决方案2】:

致那些可能再次面临这个问题的人:

  • 您应该首先定义 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-11
    • 2019-03-08
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多