Django实战(14):让页面联动起来
上一节我们实现了一个”能看不能用“的购物车,现在我们来使用这个购物车。
首先是产品目录界面中的”加入购物车“链接,我们希望点击这个按钮后,在购物车中添加该产品(添加的规则是如果购物车中已经有该产品就增加数量,如果没有就增加条目),然后显示购物车。首先我们设计一个”RESTful“的加入购物车链接,其形式是:
http://localhost:8080/depotapp/cart/add/xxx
其中xxx为产品的ID。
这需要在depotapp/urls.py中增加一条配置:
(r'cart/view/(?P<id>[^/]+)/$', add_to_cart),
这 条url配置中使用了python正则表达式中的”命名组“。其语法是(?P<name>pattern) ,这里 name 是组的名字,而 pattern 是匹配的某个模式。命名组的作用是将pattern匹配到的字符串按照name指定的参数传递给view函数。在上面的配置中指定参数名称为id。如果我 们的view函数定义为def add_to_cart(request,id)。上述的url配置会自动调用add_to_cart(request, id=xxx),其中xxx为产品的ID。(如果不使用命名组,则会调用add_to_cart(request,xxx),如果有多个参数需要通过 url匹配,就会带来麻烦)
接下来是定义view函数,在depotapp/views.py中:
def add_to_cart(request,id):
product = Product.objects.get(id = id)
cart = request.session.get("cart",None)
ifnot cart:
cart = Cart()
request.session["cart"] = cart
cart.add_product(product)
request.session['cart'] = cart
return view_cart(request)
根据url中的id参数获取产品,加入购物车,然后调用view_cart视图函数显示购物车。这里面判断session中是否有cart对象的写 法与上 一节的view_cart视图函数中的写法相同,不符合DRY的原则。为了简单这里暂时不去管它,在后续的内容中再来重构。
要注意,从session中获取对象后,对该对象属性的更改不能自动同步到session中,而是需要重新写入session。
最后就是增加链接,使得从产品列表页可以直接加入购物车。使用前面介绍过的Django模板中的url表达式可以自动生成到视图函数的链接,即使将来URLconf有所改变,也不需要再修改模板。同样的道理,在购物车模板中,将”继续购物“的链接改为{% url depotapp.views.store_view %},就可以自动链接到产品目录视图对应的url。
最后再实现一个”清空购物车“的功能:
url:
(r'cart/clean/', clean_cart),
view函数:
def clean_cart(request):
request.session['cart'] = Cart()
return view_cart(request)
view_cart.html模板中的链接:
{% url depotapp.views.clean_cart %}
请自己将这些内容加入相关文件,即可实现”清空购物车“的功能。
Django实战(14):让页面联动起来的更多相关文章
- Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接
在文章 Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接(一) 中我们成功的为/feedback/feedback_stats/路径自定义了使用tem ...
- [实战]MVC5+EF6+MySql企业网盘实战(14)——逻辑重构
写在前面 上篇文章关于修改文件夹和文件名称导致的找不到物理文件的问题,这篇文章将对其进行逻辑的修改. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6 ...
- 非等高cell实战--实现微博页面
代码地址如下:http://www.demodashi.com/demo/11639.html 前言 学习过UITableView.AutoLayout以及MVC的相关知识,接下来通过一个微博页面实战 ...
- 从零开始部署Django生产环境(适用:《跟老齐学Python Django实战》)
<跟老齐学Python Django实战>作为市面上少有的Django通俗实战书籍,给了我学习Django很大的帮助.作为一名新入门的菜鸟,全书我重复练习了至少三遍,每次都有新的收获. 前 ...
- django xadmin中logout页面在chrome浏览器中点击关闭页面无效
问题现象 django xadmin中logout页面在chrome浏览器中点击关闭页面无效,无法关闭相应的页面 问题原因 高版本的chrome等浏览器不支持在window.colse()的写法 问题 ...
- django 从零开始 4 404页面和500页面设置
在视图函数中定义两个 函数 分别对应404 个500页面 (自定义html内容吧,这里只是展示) 在template页面指向自己定义的404.html和500.html页面 在项目的urls中设置 h ...
- Django实战(一)-----用户登录与注册系统3(前端页面、登录视图)
基本框架搭建好了后,我们就要开始丰富页面内容了.最起码,得有一个用户登录的表单不是么?(注册的事情我们先放一边.) 一. 原生HTML页面 删除原来的login.html文件中的内容,写入下面的代码: ...
- mxonline实战14,全局搜索,修改个人中心页面个人资料信息
对应github地址:第14天 一. 全局搜索 1. 使用关键词搜索 courses/views.py/CourseListView新增代码,不用把search_keywords传到前端
- 5、Django实战第5天:首页和登录页面的配置
从这天开始我们需要用到前端源码,需要的朋友可以进行小额打赏(15元),打赏二维码在博客的右侧,打赏后可以凭截图联系463951510@qq.com,博主收到邮件后会立即回复发送所有源码素材,实战过程中 ...
随机推荐
- poj 2185 Milking Grid
Milking Grid http://poj.org/problem?id=2185 Time Limit: 3000MS Memory Limit: 65536K Descript ...
- C#委托Code
class Program { delegate double ProcessDelegate(double param1, double param2); static double Multipl ...
- zz图像卷积与滤波的一些知识点
Xinwei: 写的通俗易懂,终于让我这个不搞CV.不搞图像的外行理解卷积和滤波了. 图像卷积与滤波的一些知识点 zouxy09@qq.com http://blog.csdn.net/zouxy09 ...
- sql 存储时空格转成问号问题
最近做系统,从邮件中导出邮件,上传到系统中,遇到一个奇葩的问题,如下: 通过本地文件看,文件名中是一个空格,上传至数据库后,展示就变成了问号,究其原因,发现是一个特殊字符导致: 最近认真去查了一下这个 ...
- Elasticsearch技术解析与实战(五)Document解析
1.手动指定document id 一般来说,是从某些其他的系统中,导入一些数据到es时,会采取这种方式,就是使用系统中已有数据的唯一标识,作为es中document的id. PUT /index/t ...
- python核心编程笔记——Chapter7
Chapter7.映像和集合类型 最近临到期末,真的被各种复习,各种大作业缠住,想想已经荒废了python的学习1个月了.现在失去了昔日对python的触觉和要写简洁优雅代码的感觉,所以临到期末毅然继 ...
- centos6安装elasticsearch6.0
环境准备 1台centos6操作系统主机,关闭selinux及iptables官方下载elasticsearch6.0软件包:https://artifacts.elastic.co/...官方下载j ...
- 图片src拼接后台返回ID
本文地址:http://www.cnblogs.com/veinyin/p/8507403.html 在学习 CSS 时只了解了给固定地址,但是如果给的是一个需要拼接的地址就蒙了,以下是基于 Vue ...
- Shell基础-Bash命令类型
Bash命令大体可以分为两类: 第一类是可执行文件,例如ls等 第二类是Bash内建命令,常见echo,cd等 bash命令优先级表:1别名 由alias指定 2关键字 3函数 由function ...
- Java中关于变量的几种情况
Java中关于变量的几种情况 1.继承时变量的引用关系 class Animals { int age = 10; void enjoy() { System.out.println("An ...