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

django-db-signals的Python项目详细描述


此应用程序向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

    importdjango_db_signalsdjango_db_signals.enable()

示例

假设您已经安装了django db信号,现在您需要记录 每次回滚数据库时都会显示消息:

fromdjango.dbimportsignalsfromdjango.dispatchimportreceiverimportlogginglogger=logging.getLogger(__name__)@reciever(signals.post_rollback)deflog_rollbacks(sender,**kwargs):# sender is a DatabaseWrapper objectlogger.info("A rollback occurred on database %s"%sender.alias)

设计

与django设置通过^{tt11}可用的方式相同$ 属性,信号可通过django.db.signals属性获得。作为 这样,尝试导入单个信号将失败:

>>>importdjango_db_signals>>>django_db_signals.enable()>>>fromdjango.dbimportsignals# GOOD>>>signals.pre_commit<django.dispatch.dispatcher.Signalobjectat0x1089c8b90>>>>fromdjango.db.signalsimportpre_commit# BADTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>ImportError:Nomodulenamedsignals

pre_…vspost_…signals

pre_…在操作发生之前发送信号。信号被发送 通过.send(…)。接收器中引发的异常将传播到 申请。利用此漏洞可以取消操作(例如阻止 提交)。

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

记录

名为django.db.signals的记录器用于记录 post_…接收者。

信号发送器

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

故障排除

“I can import ^{tt12}$, but when I try to access a signal I get an ^{tt22}$ exception.”

您需要通过django_db_signals.enable()

启用信号

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaCenter是JavaFX2中不可执行的窗格   java Docker将容器连接到本地数据库   java无法通过Spring从Redis获得正确的值   java为什么要将数组转换为列表再转换为数组   Java泛型在方法中放入字符串或整数参数   在Cloud Bigtable SDK中找不到java类   java Mavensiteplugin无法加载生成的源(Jaxb)   java GWT序列化和Appengine通道Api   PrintWriter out=new PrintWriter(sWriter)和PrintWriter out=response之间的java差异。getWriter()   空手道DSL中的javascript,在java参数调用中传递变量时如何转义单引号   windows 64位java可以与32位tomcat一起使用   为for循环| Java输入参数   java您可以更改SWT选项卡项的背景和/或前景颜色吗?   用java生成6位pin码   java如何从另一个通量中排除通量中的所有元素   java无法调用“javafx.scene.control.ComboBox.getItems()”,因为“Controller.getMyBox()”的返回值为null   将Java字符串与数组匹配时出现问题   java如何使用HttpsUrlConnection对SSL连接使用代理身份验证?   java如何检查XML元素是否包含CDATA?