РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
555 of 643 menu

Класс Namespace

Класс Namespace применяется для создания отдельного пространства имён сигналов. Это позволяет группировать события по категориям и избегать пересечения имён между разными библиотеками. Экземпляр класса хранит сигналы как атрибуты, а доступ к ним осуществляется через вызов метода signal.

При создании экземпляра первым параметром передаётся имя пространства имён. Каждый сигнал внутри пространства создаётся вызовом метода signal с именем события. Полученный сигнал можно соединять с функциями-обработчиками через connect и отправлять через send.

Синтаксис

from flask.signals import Namespace ns = Namespace(name) sig = ns.signal(name)

Пример

Давайте создадим пространство имён и один сигнал внутри него:

from flask import Flask from flask.signals import Namespace app = Flask(__name__) ns = Namespace('myapp') user_registered = ns.signal('user-registered') def on_user_registered(sender, **extra): return 'handler called' user_registered.connect(on_user_registered, app) @app.route('/') def index(): res = user_registered.send(app) return str(res)

Результат выполнения кода для адреса /:

[('handler called', None)]

Пример

Давайте создадим два сигнала в одном пространстве имён и соединим их с разными обработчиками:

from flask import Flask from flask.signals import Namespace app = Flask(__name__) ns = Namespace('shop') order_created = ns.signal('order-created') order_paid = ns.signal('order-paid') def on_order_created(sender, **extra): return 'created' def on_order_paid(sender, **extra): return 'paid' order_created.connect(on_order_created, app) order_paid.connect(on_order_paid, app) @app.route('/') def index(): res1 = order_created.send(app) res2 = order_paid.send(app) return str(res1) + ' ' + str(res2)

Результат выполнения кода для адреса /:

[('created', None)] [('paid', None)]

Пример

Давайте передадим дополнительные данные вместе с сигналом через именованные аргументы:

from flask import Flask from flask.signals import Namespace app = Flask(__name__) ns = Namespace('auth') user_logged_in = ns.signal('user-logged-in') def on_user_logged_in(sender, **extra): return extra['username'] user_logged_in.connect(on_user_logged_in, app) @app.route('/') def index(): res = user_logged_in.send(app, username='abcde') return str(res)

Результат выполнения кода для адреса /:

[('abcde', None)]

Смотрите также

  • метод signal,
    который создаёт сигнал внутри пространства имён
  • метод connect,
    который соединяет сигнал с обработчиком
  • метод send,
    который отправляет сигнал всем получателям
  • класс Signal,
    который представляет отдельный сигнал
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить