Django 实现购物车功能的示例代码


Posted in Python onOctober 08, 2018

购物车思路:使用 session 功能识别不同浏览器用户,使得用户不管是否登录了网站,均能够把想要购买的产品放在某个地方,之后随时可以显示或修改要购买的产品,等确定了之后再下订单,购物车可以用来暂存商品。

我们可以使用 session 为每一个用户创建一个 ID,然后以这个 ID 作为创建每一个购物车的依据。这个购物车在用户浏览过程中会保留数据,一直到实际完成下单,用户执行清除,或者关闭浏览器为止,当然,退出登录的话购物车内容也会消失不见。

在 settings.py 文件中加入下列语句,表示要求在浏览器一关闭的时候 session 就会失效。

SESSION_EXPIRE_AT_BROWSER_CLOSE = True

购物车的具体实现已经有现成的模块 django-cart 可以使用,详细用法可以参考 GitHub:https://github.com/bmentges/django-cart 。执行安装。

pip install django-cart

安装完成后我们在 settings.py 文件中 INSTALL_APPS 中加入 'cart' 模块。并执行 ./manage.py migrate 更新数据库。

在 urls.py 中增加3个网站样式,分别用来执行购物车的增加产品,删除产品以及查看购物车。

url(r'^cart/$', views.cart),
url(r'^additem/(\d+)/(\d+)/$', views.add_to_cart, name='additem-url'),
url(r'^removeitem/(\d+)/$', views.remove_from_cart, name='removeitem-url'),

我们编写 add_to_cart 函数,调用 django-cart 模块的 Cart 类,实现增加产品功能。

from cart.cart import Cart
def add_to_cart(request, product_id, quantity):
 product = models.Product.objects.get(id=product_id)
 cart = Cart(request)
 cart.add(product, product.price, quantity)
 return redirect('/')

这里记得将 cart.py 中的 import models 改为 from . import models ,否则 Python 会找不到这个模块,报错。

删除产品。

def remove_from_cart(request, product_id):
 product = models.Product.objects.get(id=product_id)
 cart = Cart(request)
 cart.remove(product)
 return redirect('/cart/')

显示购物车内容。

@login_required
def cart(request):
 all_categories = models.Category.objects.all()
 cart = Cart(request)
 template = get_template('cart.html')
 html = template.render(context=locals(), request=request)
 return HttpResponse(html)

购物车的 html 文件 cart.html 。

<!-- cart.html (mshop project) -->
{% extends "base.html" %}
{% block title %}查看购物车{% endblock %}
{% block content %}
<div class='container'>
{% for message in messages %}
 <div class='alert alert-{{message.tags}}'>{{ message }}</div>
{% endfor %}
 <div class='row'>
  <div class='col-md-12'>
   <div class='panel panel-default'>
    <div class='panel-heading' align=center>
     <h3>欢迎光临迷你小电商</h3>
      {% if user.socialaccount_set.all.0.extra_data.name %}
       {{user.socialaccount_set.all.0.extra_data.name}}<br/>
       <img src='{{user.socialaccount_set.all.0.get_avatar_url}}' width='100'>
      {% else %}
       Welcome: {{ user.username }}
      {% endif %}
    </div>
   </div>
  </div>
 </div>
 <div class='row'>
  <div class='col-sm-12'>
   <div class='panel panel-info'>
    <div class='panel panel-heading'>
     <h4>我的购物车</h4>
    </div>
    <div class='panel panel-body'>
     {% for item in cart %}
     {% if forloop.first %}
     <table border=1>
      <tr>
       <td width=300 align=center>产品名称</td>
       <td width=100 align=center>单价</td>
       <td width=100 align=center>数量</td>
       <td width=100 align=center>小计</td>
       <td width=100 align=center>删除</td>
      </tr>
     {% endif %}
      <div class='listgroup'>
       <div class='listgroup-item'>
        <tr>
         <td>{{ item.product.name }}</td>
         <td align=right>{{ item.product.price }}</td>
         <td align=center>{{ item.quantity }}</td>
         <td align=right>{{ item.total_price }}</td>
         <td align=center>
          <a href='{% url "removeitem-url" item.product.id %}'><span class='glyphicon glyphicon-trash'></span></a>
         </td>
        </tr>
       </div>
      </div>
     {% if forloop.last %}
     </table>
     <button class='btn btn-warning'><a href='/order'>我要订购</a></button>
     {% endif %}
     {% empty %}
      <em>购物车是空的</em>
     {% endfor %}
    </div>
    <div class='panel panel-footer'>
     总计:{{ cart.summary }}元
    </div>
   </div>
  </div>
 </div>
</div>
{% endblock %}

显示如下:

Django 实现购物车功能的示例代码

 至此,我们便完成了购物车功能,接下来可以实现订单功能,付款功能等等。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
python实现逆序输出一个数字的示例讲解
Jun 25 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
Python进度条的制作代码实例
Aug 31 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 Python
python爬虫调度器用法及实例代码
Nov 30 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 #Python
Python django使用多进程连接mysql错误的解决方法
Oct 08 #Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 #Python
Python中的函数式编程:不可变的数据结构
Oct 08 #Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 #Python
JSON文件及Python对JSON文件的读写操作
Oct 07 #Python
Python实现登陆文件验证方法
Oct 06 #Python
You might like
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
跟我学习javascript的undefined与null
2015/11/17 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
微信小程序 扎金花简单实例
2017/02/21 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
Python 获取div标签中的文字实例
2018/12/20 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
Python骚操作之动态定义函数
2019/03/26 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
学习党课思想汇报
2013/12/29 职场文书
《狼》教学反思
2014/03/02 职场文书
《画风》教学反思
2014/04/16 职场文书
初中新生军训方案
2014/05/13 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
Python实现简单的俄罗斯方块游戏
2021/09/25 Python
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL