繁体   English   中英

带有应用程序工厂和蓝图的 Flask-PyMongo

[英]Flask-PyMongo with application factory and blueprints

我正在尝试使用蓝图和应用程序工厂实现 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})

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM