zoukankan      html  css  js  c++  java
  • django 事务处理

    django对于事务的支持分几个层次。 

    1. 什么都不管的话,它是使用 autocommit 方式。也就是在执行了 save() 或 delete() 之后就自动提交了。 

    2. 通过增加 Transaction 中间件来实现自动的事务支持。我感觉这个是非常方便的做法。使用它,你首先需要在 settings.py 中增加一个中间件的设置: 

    MIDDLEWARE_CLASSES = ( 
    "django.middleware.common.CommonMiddleware", 
    "django.middleware.sessions.SessionMiddleware", 
    "django.middleware.cache.CacheMiddleware", 
    "django.middleware.transaction.TransactionMiddleware", 


    但要注意,这个设置与其它的中间件的顺序是有关的。所以置于 TransactionMiddleware 之后的中间件也将受事务的控制。因此,如果把 session 中间件放在 Transaction 之后,它也会受到影响。不过文档上说 Cache 没有关系,因为它使用自已内部的数据库处理。 

    那么只要设置这个中间件之后,事务机制就自动生效了。你不需要在 View 代码中做特殊的处理。只要一个 View 在 Response 返回成功,事务就自动提交。一旦出现异常,事务就回滚。太方便了。因此 Woodlog 中我只加了这么个设置,其它的我都没有动。而且我测试了一下,故意引发一个异常,故果在页面上出现了异常的报错,数据都没有丢失。 

    3. 自已来控制事务 

    如果你不喜欢 django 为你实现的这种事务方式,你还可以自已来控制事务,这时你可以不安装 TransactionMiddleware中间件了。基本上都是通过 decorator 来实现的,即在每个View函数前加上decorator的修饰。比如: 

    @transaction.autocommit 
    就是实现了缺省状态的事务处理,即碰上 save() 或 delete() 就自动提交。 
    @transaction.commit_on_success 
    当整个view成功后提交事务,否则回滚,这与 TransactionMiddleware提供的方式是一样的。 
    @transaction.commit_manually 
    这是最手动的方式。你需要显示地调用commit或rollback。 
    具体的例子参见 Transaction 文档。 

    同时 Django 可以允许你在 settings.py 设置 DISABLE_TRANSACTION_MANAGEMENT 为 True 来禁止事务处理。这样在你需要时你可以自已来进行控制事务。

  • 相关阅读:
    css自适应宽高等腰梯形
    控制台屏蔽某console的输出
    js定时器的时间最小值-setTimeout、setInterval
    03_数字的字面量
    程序员-表情包
    程序员-趣图集
    js不是从上到下执行的吗?
    CSS样式重置
    系统程序名命令表
    js手风琴图片切换实现原理及函数分析
  • 原文地址:https://www.cnblogs.com/Mingxx/p/2823158.html
Copyright © 2011-2022 走看看