Если я отправлю объект функции "Сигнал" python из функции, что должно быть аргументом "отправителя"?
Если я посылаю сигнал из функции модуля (функция просмотра django, как это бывает), это не внутри класса, это не очевидно (для меня), что должен быть отправителем - если что-нибудь? Соответствует ли sender=None
в этом случае?
В качестве альтернативы, эта функция вызывается HTTP-запросом, который я сейчас передаю в качестве отдельного аргумента - должен ли я передать это вместо?
Вариант A:
from django.dispatch import Signal
my_signal = Signal(
providing_args=['my_arg', 'request']
)
# this is a view function
def do_something(request):
# ... do useful stuff
my_signal.send(
sender=None,
my_arg="Hello",
request=request
)
Вариант B:
from django.dispatch import Signal
my_signal = Signal(
providing_args=['my_arg']
)
# this is a view function
def do_something(request):
# ... do useful stuff
my_signal.send(
sender=request,
my_arg="Hello",
)
[ОБНОВЛЕНИЕ]
Вариант A имеет его. Там ничего полезного, что получатель может сделать с отправителем в этом случае (т.е. Это не объект), поэтому установите его в None.
Ответы
Ответ 1
django.dispatch.Dispatcher источник просто говорит, что он должен быть
"...[t]he sender of the signal. Either a specific object or None."
который затем соединяется с приемником через connect(), для которого значение отправителя:
"The sender to which the receiver should respond. Must either be
of type Signal, or None to receive events from any sender"
который, я признаю, не особенно ясен, но в вашем случае я бы сказал, чтобы использовать sender=None
, потому что нет ничего конкретного, к которому нужно подключиться, поскольку запрос является временным.