Django实战(14):让页面联动起来

原文地址:http://blog.csdn.net/thinkinside/article/details/7235082,欢迎转载,请保留链接!

上一节我们实现了一个”能看不能用“的购物车,现在我们来使用这个购物车。

首先是 产品目录界面中的”加入购物车“链接,我们希望点击这个按钮后,在购物车中添加该产品(添加的规则是如果购物车中已经有该产品就增加数量,如果没有就增加条目),然后显示购物车。首先我们设计一个”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)
    if not 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 %}

请自己将这些内容加入相关文件,即可实现”清空购物车“的功能。






  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值