购物车思路:使用会话功能识别不同浏览器用户,使得用户不管是否登录了网站,均能够把想要购买的产品放在某个地方,之后随时可以显示或修改要购买的产品,等确定了之后再下订的单,购物车可以用来暂存商品。
我们可以使用会话为每一个用户创建一个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实现购物车功能的示例代码