热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python项目Django结算订单接口设计和定义

结算订单逻辑分析结算订单是从Redis购物车中查询出被勾选的商品信息

结算订单逻辑分析
结算订单是从Redis购物车中查询出被勾选的商品信息进行结算并展示

在这里插入图片描述
后端接口定义

class OrderSettlementView(LoginRequiredMixin, View):
"""结算订单"""
def get(self, request):
"""提供订单结算页面"""
return render(request, 'place_order.html')

结算订单后端逻辑实现

class OrderSettlementView(LoginRequiredMixin, View):
"""结算订单"""
def get(self, request):
"""提供订单结算页面"""
# 获取登录用户

# 查询地址信息

# 从Redis购物车中查询出被勾选的商品信息

# 准备初始值

# 查询商品信息

# 补充运费

# 渲染界面
return render(request, 'place_order.html', context)

结算订单页面渲染

<h3 class="common_title">确认收货地址</h3>
<div class="common_list_con clearfix" id="get_site">
<dl>
{% if addresses %}
<dt>寄送到:</dt>
{% for address in addresses %}
<dd @click="nowsite={{ address.id }}"><input type="radio" v-model="nowsite" value="{{ address.id }}">{{ address.province }} {{ address.city }} {{ address.district }}{{ address.receiver }} 收) {{ address.mobile }}</dd>
{% endfor %}
{% endif %}
</dl>
<a href="{{ url('users:address') }}" class="edit_site">编辑收货地址</a>
</div>
<h3 class="common_title">支付方式</h3>
<div class="common_list_con clearfix">
<div class="pay_style_con clearfix">
<input type="radio" name="pay_method" value="1" v-model="pay_method">
<label class="cash">货到付款</label>
<input type="radio" name="pay_method" value="2" v-model="pay_method">
<label class="zhifubao"></label>
</div>
</div>
<h3 class="common_title">商品列表</h3>
<div class="common_list_con clearfix">
<ul class="goods_list_th clearfix">
<li class="col01">商品名称</li>
<li class="col02">商品单位</li>
<li class="col03">商品价格</li>
<li class="col04">数量</li>
<li class="col05">小计</li>
</ul>
{% for sku in skus %}
<ul class="goods_list_td clearfix">
<li class="col01">{{loop.index}}</li>
<li class="col02"><img src="{{ sku.default_image.url }}"></li>
<li class="col03">{{ sku.name }}</li>
<li class="col04"></li>
<li class="col05">{{ sku.price }}</li>
<li class="col06">{{ sku.count }}</li>
<li class="col07">{{ sku.amount }}</li>
</ul>
{% endfor %}
</div>
<h3 class="common_title">总金额结算</h3>
<div class="common_list_con clearfix">
<div class="settle_con">
<div class="total_goods_count"><em>{{ total_count }}</em>件商品,总金额<b>{{ total_amount }}</b></div>
<div class="transit">运费:<b>{{ freight }}</b></div>
<div class="total_pay">实付款:<b>{{ payment_amount }}</b></div>
</div>
</div>
<div class="order_submit clearfix">
<a @click="on_order_submit" id="order_btn">提交订单</a>
</div>
<script type="text/Javascript">
let default_address_id = {{ user.default_address.id }};
let payment_amount = {{ payment_amount }};
</script>

结算订单

orders/ views.py

from django.shortcuts import render
from django.views import View
from django.contrib.auth.mixins import LoginRequiredMixin
from users.models import Address
from goods.models import SKU, SPU
from django_redis import get_redis_connection
class OrderSettlementView(LoginRequiredMixin, View):
"""结算订单"""
def get(self, request):
# 查询用户收货地址(没有被删除的)
user = request.user
try:
addresses = Address.objects.filter(user=user, is_deleted=False)
except Exception as e:
addresses = None
redis_conn = get_redis_connection('carts')
# hash 所有的购物车数据 勾选和未勾选的{'b'1: 'b'2, 'b'2: 'b'3}
# 查询所有的商品
redis_cart = redis_conn.hgetall('cart_%s' % user.id)
# set 被勾选的商品id {b'1'}
# 被勾选的商品id
redis_selected = redis_conn.smembers('selected_%s' % user.id)
# 总计需要将商品数据重新构造出一个新的数据类型
# new_cat_dict --> {b'1':b'2'}->被勾选的商品的个数(1号商品有2件)
new_cart_dict = {}
for sku_id in redis_selected:
new_cart_dict[int(sku_id)] = int(redis_cart[sku_id])
# 取出所有的keys
sku_ids = new_cart_dict.keys()
# 查询出所有被勾选的商品在SKU里
skus = SKU.objects.filter(id__in=sku_ids)
# print(skus)
total_count = 0
total_amount = 0
for sku in skus:
# 给sku添加数量和小计和属性
sku.count = new_cart_dict[sku.id]
sku.amount = sku.price * sku.count
total_count += sku.count
total_amount += sku.amount
freight = 10
context = {
'addresses': addresses,
'skus': skus,
'total_count': total_count, # 购物车商品总件数
'total_amount': total_amount, # 总金额
'freight': freight, # 运费
'payment_amount': total_amount + freight, # 实际付款
}
return render(request, 'place_order.html', context=context)

orders/ urls.py

# @Time:2021/4/3 18:17
# @Author:Ellen
# @File:urls.py
from django.urls import path
from . import views
app_name = 'orders'
urlpatterns = [
# 展示订单
path('orders/settlement/', views.OrderSettlementView.as_view(), name='settlement')
]

推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • 学习一门编程语言,除了语法,最重要的是学习解决问题。很多时候单凭自己的能力确实无法做到完美解决,所以无论是搜索引擎、社区、文档还是博客&# ... [详细]
  • 都说Python处理速度慢,为何月活7亿的 Instagram依然在使用Python?
    点击“Python编程与实战”,选择“置顶公众号”第一时间获取Python技术干货!来自|简书作者|我爱学python链接|https:www.jian ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 第一种&amp;amp;lt;script&amp;amp;gt;$(&amp;quot;.eq&amp;quot;).on(&amp;qu ... [详细]
  • 本文内容皆为作者原创,如需转载,请注明出处:https:www.cnblogs.comxuexianqip13045462.html1.自定义分页器的拷贝及使用当我们需要使用 ... [详细]
author-avatar
碧桃玉李
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有