2013-06-11 31 views
16

Nếu tôi gửi một tín hiệu từ một chức năng mô-đun (một chức năng xem django như nó xảy ra), đó không phải là bên trong một lớp, nó không rõ ràng (với tôi) những gì người gửi nên - nếu có? sender=None có phù hợp trong trường hợp này không?Nếu tôi gửi một đối tượng python 'Signal' từ một hàm, đối số "người gửi" sẽ là gì?

Cách khác, hàm được gọi bởi một yêu cầu HTTP, mà tôi hiện đang chuyển vào như một đối số riêng biệt - tôi có nên chuyển nó thay thế không?

Lựa chọ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 
    ) 

Lựa chọ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", 
    ) 

[UPDATE]

Lựa chọn A có nó. Không có gì hữu ích mà người nhận có thể làm với người gửi trong trường hợp này (nghĩa là nó không phải là một đối tượng), vì vậy hãy đặt nó thành Không.

Trả lời

10

Các django.dispatch.Dispatcher source chỉ đơn giản nói rằng họ nên

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

mà sau đó mối quan hệ với người nhận thông qua connect(), mà ý nghĩa của người gửi là:

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

đó, tôi thừa nhận, không phải là đặc biệt rõ ràng, nhưng trong trường hợp của bạn, tôi sẽ nói để sử dụng sender=None bởi vì không có gì cụ thể để móc vào, như yêu cầu là thoáng qua.

+0

người gửi = Không có. –

Các vấn đề liên quan