получить глобальную переменную из колбы после ее регистрации - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь получить переменную и то, что она содержит, которая была создана "до первого запроса приложения".Да, у меня возникает соблазн скопировать и вставить код в другое место и получить то, что я создаю для работы, но знаю, что это не элегантно и пахнет.Таким образом, переменная должна все еще где-то существовать, вопрос только в том, где и как ее вернуть?

вот файлы:

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» для моего скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...