.Tang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

from django.db import transaction 

两种方式控制事务:为了保持数据一致性

  一个Book表,一个Author表。添加一本书,也要保证添加作者。By事物控制

  book = Book.object.get(id=1) # 单个Book.object

  book.字段.find('a') # 查询该字段是否包含'a' ,不包含返回 -1,包含返回 >=0

一:装饰器

 只能装饰app下的View中的def方法。

@transaction.atomic
def forTransaction(request):
    """ 事物装饰器transaction.atomic """
    author = Author.objects.create(name='xixi1')
    book = Book.objects.create(headline='练习事物22')
    author.book.add(book)
   author,save()
# assert not book.headline.find("事物") >=0, "敏感信息" if book: raise Exception("强行错误") # 有错误就都不执行 return HttpResponse("ojbk")

 二:使用上下文管理器的方式

在view中,使用 with transaction.atomic():

class ForTransaction(View):
    ''' 使用上下文管理器,管理事务 '''
    def get(self, request):
        with transaction.atomic():
            author = Author.objects.create(name='haha1')
            book = Book.objects.create(headline='upDown')
            author.book.add(book)  # add 多对多关系使用
            author.save()
            assert not book.headline.find("up") >=0, "敏感信息" #包含‘up’返回>=0的值,则报错。 有错误就都不执行
        return HttpResponse('ojbk')

 

posted on 2018-05-10 12:40  .Tang  阅读(152)  评论(0编辑  收藏  举报