Si envío un objeto ''Signal'' de python desde una función, ¿cuál debería ser el argumento del "remitente"?
django signals (2)
Si envío una Señal desde una función de módulo (una función de vista de django en el momento en que ocurre), eso no está dentro de una Clase, no es obvio (para mí) lo que debe ser el remitente, ¿hay algo? ¿Es el sender=None
apropiado en este caso?
Alternativamente, la función es invocada por una solicitud HTTP, que actualmente paso como un argumento separado. ¿Debo pasar eso en su lugar?
Opción 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
)
Opción 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",
)
[ACTUALIZAR]
La opción A lo tiene. No hay nada útil que el receptor pueda hacer con el remitente en este caso (es decir, no es un objeto), así que configúrelo en Ninguno.
La source django.dispatch.Dispatcher simplemente dice que debería ser
"...[t]he sender of the signal. Either a specific object or None."
que luego se vincula con el receptor a través de connect() , para el cual el significado del remitente es:
"The sender to which the receiver should respond. Must either be
of type Signal, or None to receive events from any sender"
lo cual, lo admito, no está particularmente claro, pero en su caso, yo diría que usar sender=None
porque no hay nada concreto para enganchar, ya que la solicitud es transitoria.
Una función es un objeto en Python, así que puedes configurar el remitente para que sea una referencia a tu función, de esta manera:
def my_func():
my_signal.send(sender=my_func, my_arg="Hello")