python - 如果我从函数发送 python 'Signal' 对象, "sender"参数应该是什么?

标签 python django signals

如果我从模块函数(发生时的 django View 函数)发送信号,它不在类中,那么(对我来说)发送者应该是什么并不明显 - 如果有的话? 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",
    )

[更新]

选项 A 有。在这种情况下,接收方对发送方没有任何用处(即它不是对象),因此请将其设置为 None。

最佳答案

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因为没有什么具体的东西可以 Hook ,因为请求是 transient 的。

关于python - 如果我从函数发送 python 'Signal' 对象, "sender"参数应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17043163/

相关文章:

javascript - Django-dashing 创建你自己的小部件

python - 如何处理 django 模型中的模型通用属性?

python - OAuth API Google 云端硬盘 Python

python - 从 python 通过 sendmail 发送邮件

django - 如何将对象传递给自定义 Django 模板标签?我想出了一个办法,但它似乎很黑

ios - ReactiveCocoa 中冷热信号的例子有哪些?

c++ - 关于 Boost Signals2,没有名为 'apply' 的类模板

加速度计信号分割

python - 在 try/except 子句中传递字典

javascript - 将 Flask 中的变量显示为 javascript 代码时出错