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 相关文章推荐
Python解析网页源代码中的115网盘链接实例
Sep 30 Python
利用python3随机生成中文字符的实现方法
Nov 24 Python
pyQt4实现俄罗斯方块游戏
Jun 26 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
Python3中的bytes和str类型详解
May 02 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
解决Python中回文数和质数的问题
Nov 24 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
python中导入 train_test_split提示错误的解决
Jun 19 Python
python在linux环境下安装skimage的示例代码
Oct 14 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
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
Python配置文件处理的方法教程
2019/08/29 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
python操作redis数据库的三种方法
2020/09/10 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
《自然之道》教学反思
2014/02/11 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
优秀大学生申请书
2019/06/24 职场文书
如何用python反转图片,视频
2021/04/24 Python
Mysql 文件配置解析介绍
2022/05/06 MySQL