Flask错误:在应用程序上下文之外工作

时间:2019-11-27 19:05:45

标签: python mysql flask runtime-error

我创建了两个蓝图(或路由文件),分别是user_routes和admin_routes,每当我尝试将db = DB(app)初始化为全局变量时,它都会将RuntimeError: Working outside of application context.用作应用程序的arg,因为MySQL()需要app对象开始工作。

我尝试使用current_app.app_context()创建一个不同的上下文,但是即使我尝试使用@ user_view.before_request(),它仍然会给我带来相同的上下文错误,但是会抛出AssertionError: A setup function was called after the first request was handled

from flask import Flask, Blueprint, g, current_app as app
from Models.User import User
from Models.Books import Books
from Models.DB import DB

user_view = Blueprint('user_routes', __name__, template_folder='/templates')


db = DB(app) # <- root cause of my nightmare
books = Books(db)
_user = User(books, db)

@user_view.route('/books', methods=['GET'])
def books():
    _user.set_session(session, g)

    return render_template("books.html")

flask中是否有任何变通办法或中间件概念可以立即初始化所有全局变量,所以我可能不必分别在每个路由中都初始化它们。


注意:为了便于理解,这是数据库类的代码:

from flask_mysqldb import MySQL

class DB():
    """Initialize mysql database """
    host = "localhost"
    user = "root"
    password = ""
    db = "ooad"
    table = ""

    def __init__(self, app):
        app.config["MYSQL_HOST"] = self.host;
        app.config["MYSQL_USER"] = self.user;
        app.config["MYSQL_PASSWORD"] = self.password;
        app.config["MYSQL_DB"] = self.db;

        self.mysql = MySQL(app)

0 个答案:

没有答案