如果我从一个模块函数发送一个信号(发生了一个django视图函数),那不在一个类中,那么(对我来说)发送者应该是什么不明显 - 如果有的话?在这种情况下sender=None
是否合适?
或者,该函数由HTTP请求调用,我当前将其作为单独的参数传递 - 我应该传递它吗?
选项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
)
选项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]
选项A有它。在这种情况下,接收者可以对发送者做任何有用的事情(即它不是对象),因此将其设置为无。
答案 0 :(得分:12)
django.dispatch.Dispatcher source只是说它应该是
"...[t]he sender of the signal. Either a specific object or None."
然后通过connect()与接收者联系,发送者的意义是:
"The sender to which the receiver should respond. Must either be
of type Signal, or None to receive events from any sender"
我承认,并不是特别清楚,但在你的情况下,我会说使用sender=None
,因为没有什么具体可以挂钩,因为请求是暂时的。
答案 1 :(得分:0)
函数是Python中的对象,因此您可以将发件人设置为函数的引用,如下所示:
def my_func():
my_signal.send(sender=my_func, my_arg="Hello")