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

  

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

  

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

  

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

        SESSION_EXPIRE_AT_BROWSER_CLOSE=True      

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

        pip安装django-cart      

安装完成后我们在设置。py文件中INSTALL_APPS中加入“购物车”模块。并执行。/管理。py迁移更新数据库。

  

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

        url (r ^购物车/$,views.cart),   url (r ' ^ additem/(\ d +)/(\ d +)/$ ',观点。add_to_cart name=' additem-url '),   url (r ' ^ removeitem/(\ d +)/美元”,观点。remove_from_cart name=' removeitem-url '),      

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

        从车。车车进口   def add_to_cart(请求、product_id数量):   产品=models.Product.objects.get (id=product_id)   车=购物车(请求)   车。添加(产品,产品。价格、数量)   返回重定向(“/?      

这里记得将购物车。py中导入的模型改为。导入模型,否则Python会找不到这个模块,报错。

  

<>强删除产品。

        def remove_from_cart(请求,product_id):   产品=models.Product.objects.get (id=product_id)   车=购物车(请求)   cart.remove(产品)   返回重定向('/车/')      

<>强显示购物车内容。

        @login_required   def购物车(请求):   all_categories=models.Category.objects.all ()   车=购物车(请求)   模板=get_template (“cart.html”)   html=template.render(上下文=当地人(),请求(请求)   返回HttpResponse (html)      

购物车的html文件车。html。

        & lt; !——购物车。html (mshop项目)——比;   {%延伸”基地。html“%}   {%块标题%}查看购物车{% endblock %}   {%块内容%}   & lt; div类=叭萜鳌北?   {%的消息消息%}   & lt; div类='警报警报——{{message.tags}}在{{消息}}& lt;/div>   {% endfor %}   & lt; div类='行'比;   & lt; div类=癱ol-md-12”比;   & lt; div类='面板panel-default '比;   & lt; div类=皃anel-heading”对齐=center>   & lt; h4>欢迎光临迷你小电商& lt;/h4>   {%如果user.socialaccount_set.all.0.extra_data.name %}   {{user.socialaccount_set.all.0.extra_data.name}} & lt; br/比;   & lt; img src=" https://www.yisu.com/zixun/{{user.socialaccount_set.all.0.get_avatar_url}}’宽度=100年的祝辞   {%其他%}   欢迎:{{用户。用户名}}   {% endif %}   & lt;/div>   & lt;/div>   & lt;/div>   & lt;/div>   & lt; div类='行'比;   & lt; div类=癱ol-sm-12”比;   & lt; div类='面板panel-info '比;   & lt; div类='面板panel-heading '比;   & lt; h5>我的购物车& lt;/h5>   & lt;/div>   & lt; div类='面板panel-body '比;   {%购物车条目的%}   如果forloop {%。第%}   & lt;表边界=1比;   & lt; tr>   & lt; td宽度=300=center>对齐;产品名称& lt;/td>   & lt; td宽度=100=center>对齐;单价& lt;/td>   & lt; td宽度=100=center>对齐;数量& lt;/td>   & lt; td宽度=100=center>对齐;小计& lt;/td>   & lt; td宽度=100=center>对齐;删除& lt;/td>   & lt;/tr>   {% endif %}   & lt; div类=發istgroup”比;   & lt; div类=發istgroup-item”比;   & lt; tr>   & lt; td> {{item.product.name}} & lt;/td>   & lt; td对齐=right> {{item.product。价格}}& lt;/td>   & lt; td对齐=center>{{项目。量}}& lt;/td>   & lt; td对齐=right>{{项目。total_price}} & lt;/td>   & lt; td=center>对齐;   & lt; a href=' https://www.yisu.com/zixun/{% url item.product“removeitem-url”。id %}的祝辞& lt;跨类=' glyphicon glyphicon-trash的祝辞& lt;/span> & lt;/a>   & lt;/td>   & lt;/tr>   & lt;/div>   & lt;/div>   如果forloop {%。去年%}   & lt;/table>   & lt;按钮类=' btn btn-warning '祝辞& lt; a href=' https://www.yisu.com/order '在我要订购& lt;/a> & lt;/button>   {% endif %}   {%空%}   & lt; em>购物车是空的& lt;/em>   {% endfor %}   & lt;/div>   & lt; div类='面板panel-footer '比;   总计:{{购物车。摘要}}元   & lt;/div>   & lt;/div>   & lt;/div>   & lt;/div>   & lt;/div>   {% endblock %}

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