django在运行时创建信号

Mo J.Mughrabi

我一直在尝试一种在运行时处理信号创建的方法,我想到了以下代码,该代码从配置/表中读取并注册post_save连接

def _send_to_messaging_notify(**kwargs):
    """ _send_to_messaging_notify
    """
    if kwargs.get('created'):
        instance = kwargs.get('instance')
        ct = ContentType.objects.get_for_model(instance)
        notify.apply_async(args=[instance.pk, ct.pk, kwargs.get('when')])


def create_function(name, args):
    def y(**kwargs):
        kwargs.update({'when': inspect.stack()[0][3]})
        print 'signal executed on {0}'.format(kwargs.get('sender'))
        _send_to_messaging_notify(**kwargs)

    y_code = types.CodeType(args, \
                            y.func_code.co_nlocals, \
                            y.func_code.co_stacksize, \
                            y.func_code.co_flags, \
                            y.func_code.co_code, \
                            y.func_code.co_consts, \
                            y.func_code.co_names, \
                            y.func_code.co_varnames, \
                            y.func_code.co_filename, \
                            name, \
                            y.func_code.co_firstlineno, \
                            y.func_code.co_lnotab)

    return types.FunctionType(y_code, y.func_globals, name)


def load_signals():
    """ load_signals
    """
    from default_senders import senders
    #
    for k in senders.iterkeys():
        post_save.connect(create_function(str(k), 0), sender=load_model(senders[k].get('default_content_type')),
                          dispatch_uid=k)


load_signals()

create_function是在运行时创建信号处理程序,然后使用 post_save.connect

当我尝试执行此

myfunc = create_function(str(k), 0)
myfunc(sender='xxx')

它工作正常,但是当挂接到post_save.connect时,当目标模型接收到post_save操作时,它什么也没做。有人可以请教吗

巴蒂亚

我看不到要在哪里创建信号post_save并在代码中发送信号。在load_signals()中,在开头包含以下代码行

from django.dispatch import Signal
post_save = Signal(providing_args=['arg1', 'arg2'])

然后,您可以使用以下方式将for循环中的信号连接到接收器功能:

post_save.connect(create_function(str(k), 0))

并使用发送信号

 post_save.send(sender='a_cool_sender', arg1='Hello!', arg2=1)

我在网上找到的最好的文章清楚地解释了Django的信号,在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在运行时动态创建类

来自分类Dev

在运行时休眠多租户创建架构

来自分类Dev

如何创建要在运行时着色的模板图像

来自分类Dev

Delphi:在运行时以动态创建的形式创建TComboBox

来自分类Dev

如何在运行时递归创建ActionBar?

来自分类Dev

在运行时创建测试(Google测试)

来自分类Dev

AngularJS-在运行时创建工厂

来自分类Dev

在运行时创建的访问控制

来自分类Dev

使用反射在运行时创建类

来自分类Dev

在运行时快速创建函数

来自分类Dev

在运行时创建Tasklet

来自分类Dev

DevExpress WebChartControl在运行时创建

来自分类Dev

如何在运行时从C ++创建QQmlComponent?

来自分类Dev

是否可以在运行时在Julia中创建类型?

来自分类Dev

在运行时创建字段

来自分类Dev

可以在运行时使用Javascript创建函数吗?

来自分类Dev

Spring Boot @Autowired在运行时创建实例

来自分类Dev

在运行时JavaScript中创建匿名函数

来自分类Dev

在运行时从protobuf文件动态创建python类?

来自分类Dev

在运行时创建DEEP不可变对象

来自分类Dev

在运行时创建Spock测试

来自分类Dev

在运行时创建Command对象

来自分类Dev

在运行时创建对象?

来自分类Dev

在运行时创建UI元素

来自分类Dev

在运行时更改子进程的终止信号

来自分类Dev

在运行时创建并填充 ImageList

来自分类Dev

Javascript:在运行时创建函数

来自分类Dev

选择在运行时创建的组件

来自分类Dev

在运行时创建字典