2013-06-11 13 views
16

Jeśli wysyłam sygnał z funkcji modułu (funkcja widoku Django), która nie jest wewnątrz klasy, nie jest dla mnie oczywiste, czym powinien być nadawca - jeśli w ogóle coś takiego? Czy w tym przypadku jest odpowiednia sender=None?Jeśli wysyłam pythonowi obiekt "Signal" z funkcji, jaki powinien być argument "nadawca"?

Alternatywnie, funkcja jest wywoływana przez żądanie HTTP, które obecnie przekazuję jako oddzielny argument - czy powinienem go przekazać zamiast tego?

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

Wariant 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]

Wariant A ma. Nie ma w tym przypadku nic użytecznego, co odbiornik może zrobić z nadawcą (tj. Nie jest obiektem), więc ustaw go na Brak.

Odpowiedz

10

django.dispatch.Dispatcher source mówi po prostu powinno być

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

który następnie wiąże się z odbiornikiem poprzez connect(), dla których znaczenie nadawcy jest:

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

co ja Przyznać, nie jest szczególnie jasne, ale w twoim przypadku powiedziałbym, aby użyć sender=None, ponieważ nie ma nic konkretnego do powiedzenia, ponieważ wniosek jest przejściowy.

+0

sender = Brak. –