python django signals

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")