我创建了两个蓝图(或路由文件),分别是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)