Django之Alipay

一:事务 

使用场景

在电商项目中必备的功能之一用户选择商品进行下单,在用户下单难免会涉及到第三方使用第三方平台进行支付 例如:支付宝

在订单支付过程中肯定会设计到两张表,订单表以及订单信息表,订单表:订单号,订单时间,用户信息等,订单商品表:记录订单中的商品 价格 标题等

在用户下单的时候肯定设计到数据的保存,但是上述两个表其实是有逻辑关联的,只有订单表下单的成功的时候,订单商品表才应该保存到数据库中

因此上述两个表涉及到要么同时成功,要么同时失败,有点需要用到数据库的事务

使用方式

在Django中可以通过django.db.transaction模块提供的atomic来定义一个事务,atomic提供两种用法,

一种是装饰器

from django.db import transaction

@transaction.atomic
def viewfunc(request):
    # 这些代码会在一个事务中执行

一种是with语句。

from django.db import transaction

def viewfunc(request):
    # 这部分代码不在事务中,会被Django自动提交
    ...

    with transaction.atomic():
        # 这部分代码会在事务中执行

在Django中,还提供了保存点的支持,可以在事务中创建保存点来记录数据的特定状态,数据库出现错误时,可以恢复到数据保存点的状态

from django.db import transaction

# 创建保存点
save_id = transaction.savepoint()  

# 回滚到保存点
transaction.savepoint_rollback(save_id)

# 提交从保存点到当前状态的所有数据库事务操作
transaction.savepoint_commit(save_id)

二:支付宝

沙箱环境

猜你喜欢

转载自www.cnblogs.com/SR-Program/p/12601601.html