Я пытаюсь получить переменную и то, что она содержит, которая была создана "до первого запроса приложения".Да, у меня возникает соблазн скопировать и вставить код в другое место и получить то, что я создаю для работы, но знаю, что это не элегантно и пахнет.Таким образом, переменная должна все еще где-то существовать, вопрос только в том, где и как ее вернуть?
вот файлы:
homepage.py
from flask import Blueprint
bp_home = Blueprint("home", __name__)
sharedvariable = None
def do_some_stuff():
global shared_variable
sharedvariable = 6
bp_home.before_app_first_request(do_some_stuff)
@bp_home.route("/home", methods=['GET'])
def home():
return "There are {} dogs.".format(sharedvariable)
__ init __. Py
from flask import Flask
from homepage import bp_home
app = Flask(__name__)
app.register_blueprint(bp_home)
Затем в другом скрипте, который не будет копироваться здесь, приложение импортируется и app.run
включенопоследняя строка.
Я работаю над новым сценарием:
mynewscript.py
from homepage import sharedvariable
# (details omitted)
print("sharedvariable is", sharedvariable)
Теперь этот последний печатает:
sharedvariable is None
Итак, я понял, что он был импортирован непосредственно из скрипта без запуска функции do_some_stuff()
.
Я попытался получить переменную общего доступа, добавив несколько строк в homepage.py:
from flask import g # new line
def do_some_stuff():
global shared_variable
sharedvariable = 6
g.sharedvariable = sharedvariable # new line
но когда я попытался вернуть это обратно в mynewscript.py:
from flask import g
print("sharedvariable is", g.sharedvariable)
Там было сказано:
AttributeError: '_AppCtxGlobals' object has no attribute 'sharedvariable'
У меня заканчиваются идеи.
Я предполагаю, что когда импортируется bp_home
, то где-то внутри него скрыто sharedvariable
.Во всяком случае, bp_home
содержит множество атрибутов и методов, таких как add_app_template_filter
, add_app_template_global
, app_context_processor
и еще около пятнадцати или около того.
Кто-нибудь знает, как импортировать эту глобальную переменную, которая, вероятно, была создана по команде register_blueprint
, в новый скрипт?Предпочел бы перерабатывать и продолжать использовать его, а не воссоздавать его в газетном тексте.(На самом деле это экземпляр класса, а не 6).
Обновление: Я попытался это решение для обмена глобальными переменными между файлами, но это не сработало.Так что сейчас я жду, чтобы выполнить работу, создав второй экземпляр «sharedvariable» для моего скрипта.