2013-06-11 10 views
16

Se invio un segnale da una funzione del modulo (una funzione di visualizzazione di django come accade), che non è all'interno di una classe, non è ovvio (per me) quale dovrebbe essere il mittente - semmai? sender=None è appropriato in questo caso?Se invio un oggetto "Segnale" python da una funzione, quale dovrebbe essere l'argomento "mittente"?

In alternativa, la funzione è invocata da una richiesta HTTP, che attualmente passo come argomento separato - dovrei passarla invece?

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

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

[UPDATE]

Opzione A ha. Non c'è nulla di utile che il ricevitore possa fare con il mittente in questo caso (cioè non è un oggetto), quindi impostarlo su Nessuno.

risposta

10

Il django.dispatch.Dispatcher source dice semplicemente che dovrebbe essere

"...[t]he sender of the signal. Either a specific object or None." 

che poi i legami con il ricevitore tramite connect(), per la quale il significato del mittente è:

"The sender to which the receiver should respond. Must either be 
of type Signal, or None to receive events from any sender" 

che, io ammetto, non è particolarmente chiaro, ma nel tuo caso, direi di usare sender=None perché non c'è nulla di concreto da collegare, poiché la richiesta è transitoria.

+0

mittente = Nessuno lo è. –