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
安装
从PyPI安装: pip install django-db-signals。
将 'django_db_signals' 添加到 INSTALLED_APPS。
通过在 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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b2e4b0b6a471ed6cfb3f78650b518af92b2e62ba0c4714c7062debd1aa40a333 |
|
MD5 | 7abdb1bf809cbd549426d01edf255a34 |
|
BLAKE2b-256 | ba72708ed89361d08679dd04d5783af51ee1e196e4b026493f70c59e4f77b963 |