在订单确认中,涉及到获取参数、校验参数;查询商品数据,判断是否为购物车的商品,遍历商品 id,获取商品信息;读取商品的数量,计算商品的金额,判断库存,需要用户的地址信息。
一、提交订单
① 在提交之前,需要验证用户是否登录
构造登录验证的函数
def login_required_json(view_func): @wraps(view_func) def wrapper(request, *args, **kwargs): if not request.user.is_authenticated(): # 如果用户未登录,返回json数据 return JsonResponse({"code": 1, "message": "用户未登录"}) else: # 如果用户登录,则进入到视图函数中执行 return view_func(request, *args, **kwargs) return wrapper
在将登录验证的视图封装到 mixin 类中。
class LoginRequiredJsonMixin(object): @classmethod def as_view(cls, **initkwargs): view = super(LoginRequiredJsonMixin, cls).as_view(**initkwargs) return login_required_json(view)
② 增加数据库事务功能
事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
from django.contrib.auth.decorators import login_required from django.http import JsonResponse from functools import wraps from django.db import transaction
class TransactionAtomicMixin(object): """提供数据库事务功能""" @classmethod def as_view(cls, **initkwargs): view = super(TransactionAtomicMixin, cls).as_view(**initkwargs) return transaction.atomic(view)
本文分享自微信公众号 - 数据云团(SmartData),作者:云团小楠
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2019-06-04
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句