跳转到主要内容

Django数据库信号(提交/回滚前后)。

项目描述

此应用程序向Django的一些数据库操作添加了一组信号

  • django.db.signals.pre_commit

  • django.db.signals.post_commit

  • django.db.signals.pre_rollback

  • django.db.signals.post_rollback

  • django.db.signals.pre_transaction_management

  • django.db.signals.post_transaction_management

要求

  • Python 2.6/2.7/3.2/3.3(3.x需要Django >=1.5)

  • Django 1.2/1.3/1.4/1.5

安装

  1. 从PyPI安装: pip install django-db-signals

  2. 'django_db_signals' 添加到 INSTALLED_APPS

  3. 通过在 models.py 中添加来启用信号

    import django_db_signals
    django_db_signals.enable()

示例

假设您已安装django-db-signals,现在您想要在数据库每次回滚时记录一条消息

from django.db import signals
from django.dispatch import receiver
import logging

logger = logging.getLogger(__name__)

@reciever(signals.post_rollback)
def log_rollbacks(sender, **kwargs):
    # sender is a DatabaseWrapper object
    logger.info("A rollback occurred on database %s" %
                sender.alias)

设计

与Django设置可通过 django.conf.settings 属性访问的方式相同,信号可通过 django.db.signals 属性访问。因此,尝试导入单个信号将失败

>>> import django_db_signals
>>> django_db_signals.enable()

>>> from django.db import signals  # GOOD
>>> signals.pre_commit
<django.dispatch.dispatcher.Signal object at 0x1089c8b90>

>>> from django.db.signals import pre_commit  # BAD
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named signals

pre_…post_… 信号

pre_… 信号在操作发生之前发送。信号通过 .send(…) 发送。在接收器中引发的异常会被传播到应用程序。这可以被利用来取消操作(例如,阻止提交)。

post_… 信号在操作之后发送,因此不能提供相同的 取消挂起的操作 行为。该信号通过 .send_robust(…) 发送,以确保所有接收器都被调用。任何引发的异常都会被记录,但不会被传播到应用程序。

记录

使用名为 django.db.signals 的记录器来记录在 post_… 接收器中抛出的所有异常。

信号发送者

对于所有数据库信号,信号的发送者是Django的数据库连接包装器。

故障排除

“我可以导入 django.db.signals,但当我尝试访问一个信号时,我得到了一个 AttributeError 异常。”

您需要通过 django_db_signals.enable() 启用信号

项目详情


下载文件

下载您平台上的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源分布

django-db-signals-0.1.1.tar.gz (3.8 kB 查看哈希值)

上传时间

由以下支持