2013-06-11 10 views
16

Wenn ich ein Signal von einer Modulfunktion aussende (eine Django-View-Funktion, wie es passiert), die nicht in einer Klasse ist, ist es für mich nicht offensichtlich, was der Absender sein sollte - wenn überhaupt? Ist sender=None in diesem Fall geeignet?Wenn ich ein Python "Signal" -Objekt von einer Funktion sende, was sollte das Argument "sender" sein?

Alternativ wird die Funktion von einer HTTP-Anfrage aufgerufen, die ich derzeit als separates Argument übergebe - sollte ich das stattdessen übergeben?

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

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

Option A hat. Es gibt nichts Nützliches, was der Empfänger in diesem Fall mit dem Sender tun kann (d. H. Es ist kein Objekt), also setze es auf None.

Antwort

10

Die django.dispatch.Dispatcher source sagt einfach sollte es sein

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

die dann knüpft an den Empfänger über connect(), für die die Bedeutung des Absenders:

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

die ich zugeben, ist nicht besonders klar, aber in Ihrem Fall würde ich sagen, sender=None zu verwenden, weil es nichts Konkretes zu Haken ist, da die Anfrage vorübergehend ist.

+0

Absender = keine ist es. –

Verwandte Themen