博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django signals 信号
阅读量:4594 次
发布时间:2019-06-09

本文共 3521 字,大约阅读时间需要 11 分钟。

 

django signals 信号

 

配置方式

app下的 __init__.py

default_app_config="web.apps.WebConfig"    #初始化app配置#调用app下面的类

 

同一个app下的 apps.py

from django.apps import AppConfig    #导入#app配置class WebConfig(AppConfig):   #必须继承这个类     name = 'web'    #app        def ready(self):        import web.signals.trade_signal        import web.signals.study_signal        import web.signals.notice_signal

 

信号

from django.db.models.signals import post_save    #保存后from django.db.models.signals import pre_save    #保存前from django.dispatch import receiver    #使用信号的装饰器 检测Django 模型对象字段值的变化from web import models    #数据库

 

orm操作前触发

@receiver(pre_save, sender=models.Order)def get_order_status(sender, instance=None, **kwargs):    """    获取订单状态    :param sender:    :param instance:    #当前对象    :param kwargs:    :return:    """#对象保存前

orm操作后触发

@receiver(post_save, sender=models.Order)def create_enrolled_record(sender, instance=None, created=False, **kwargs):    """    :param sender:    :param instance:保存后的对象    :param created: 是否是创建新的记录    :param kwargs:    :return:    """#保存对象后

 

signals.py

import warningsfrom functools import partialfrom django.db.models.utils import make_model_tuplefrom django.dispatch import Signalfrom django.utils import sixfrom django.utils.deprecation import RemovedInDjango20Warningclass_prepared = Signal(providing_args=["class"])class ModelSignal(Signal):    """    Signal subclass that allows the sender to be lazily specified as a string    of the `app_label.ModelName` form.    """    def _lazy_method(self, method, apps, receiver, sender, **kwargs):        from django.db.models.options import Options        # This partial takes a single optional argument named "sender".        partial_method = partial(method, receiver, **kwargs)        if isinstance(sender, six.string_types):            apps = apps or Options.default_apps            apps.lazy_model_operation(partial_method, make_model_tuple(sender))        else:            return partial_method(sender)    def connect(self, receiver, sender=None, weak=True, dispatch_uid=None, apps=None):        self._lazy_method(            super(ModelSignal, self).connect, apps, receiver, sender,            weak=weak, dispatch_uid=dispatch_uid,        )    def disconnect(self, receiver=None, sender=None, weak=None, dispatch_uid=None, apps=None):        if weak is not None:            warnings.warn("Passing `weak` to disconnect has no effect.", RemovedInDjango20Warning, stacklevel=2)        return self._lazy_method(            super(ModelSignal, self).disconnect, apps, receiver, sender, dispatch_uid=dispatch_uid        )pre_init = ModelSignal(providing_args=["instance", "args", "kwargs"], use_caching=True)post_init = ModelSignal(providing_args=["instance"], use_caching=True)pre_save = ModelSignal(providing_args=["instance", "raw", "using", "update_fields"],                       use_caching=True)post_save = ModelSignal(providing_args=["instance", "raw", "created", "using", "update_fields"], use_caching=True)pre_delete = ModelSignal(providing_args=["instance", "using"], use_caching=True)post_delete = ModelSignal(providing_args=["instance", "using"], use_caching=True)m2m_changed = ModelSignal(    providing_args=["action", "instance", "reverse", "model", "pk_set", "using"],    use_caching=True,)pre_migrate = Signal(providing_args=["app_config", "verbosity", "interactive", "using", "apps", "plan"])post_migrate = Signal(providing_args=["app_config", "verbosity", "interactive", "using", "apps", "plan"])

  

 

转载于:https://www.cnblogs.com/shizhengwen/p/7716178.html

你可能感兴趣的文章
封装别人的库的时候一些注意点
查看>>
【Jim】I am back (ง •_•)ง
查看>>
Mysql数据库相关知识
查看>>
flex布局学习总结
查看>>
函数式编程
查看>>
js中的事件添加和程序
查看>>
多校 2013 8
查看>>
Docker 容器管理
查看>>
zoj-3706 Break Standard Weight
查看>>
函数字符串C++的String类的字符串分割实现----(效果等于Java的String类的split函数)...
查看>>
[转]html转码表
查看>>
sql server 2008资源管理器
查看>>
管道技巧-while read line
查看>>
《深入理解PHP内核》
查看>>
C#里的一些加密解密标准函数示例——DES,SHA1,RSA
查看>>
C语言入门(1)——C语言概述
查看>>
Unix/Linux环境C编程入门教程(40) 初识文件操作
查看>>
现实世界的Windows Azure:采访AppPoint的技术总监Rajesekar Shanmugam
查看>>
USACO 4.1.2 栅栏的木料
查看>>
几个linux下的命令
查看>>