簡體   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