当前位置: 代码网 > it编程>前端脚本>Python > Django 事务transaction.atomic()的使用方法

Django 事务transaction.atomic()的使用方法

2025年12月08日 Python 我要评论
导入需要使用的包from django.shortcuts import renderfrom django.http import httpresponsefrom django.views imp

导入需要使用的包

from django.shortcuts import render
from django.http import httpresponse
from django.views import view
from django.db import transaction   # 导入事务

一.类视图 (整个函数使用事务,@transaction.atomic装饰器)

class myview(view):
 
    @transaction.atomic
    # transaction.atomic装饰器可以保证该函数中所有的数据库操作都在一个事务中。
    def post(self, request):
 
        # 数据库操作1。。。
        # 数据库操作2。。。
        
        return httpresponse('ok')

二.类视图 (函数体事务,保存点的使用)

class myview2(view):
    @transaction.atomic
    def post(self, request):
 
        # 设置事务保存点
        s1 = transaction.savepoint()   # 可以设置多个保存点
 
        # 数据库操作。。。
 
        # 事务回滚 (如果发生异常,就回滚事务)
        transaction.savepoint_rollback(s1)  # 可以回滚到指定的保存点
 
        # 提交事务 (如果没有异常,就提交事务)
        transaction.savepoint_commit(s1)
 
        # 返回应答
        return httpresponse('ok')

三.函数体中使用

def func(request):
    with transaction.atomic():
        sid = transaction.savepoint()
        try:
            serializer.is_valid(raise_exception=true)
            comment = serializer.save()
            handle_obj_files(comment, request)
            visitor_order.epilogue.add(comment)
            visitor_order.status = 'complete'
            visitor_order.save()
        except exception as e:
            transaction.savepoint_rollback(sid)
            return api_bad_request(str(e))
        else:
            transaction.savepoint_commit(sid)
        data = visitororderretrieveserializer(visitor_order).data
        return api_success(data=data)

此方法和方法二类似

到此这篇关于django 事务transaction.atomic()的使用方法的文章就介绍到这了,更多相关django 事务transaction.atomic()内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com