• 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 %}

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

  • 相关阅读:
    IIS7,iis6 管道模型及处理差异
    web相关基础知识4
    web相关基础知识3
    web相关基础知识2
    web相关基础知识1
    有关于PHP的基础知识
    软件工程课程建议
    结对编程-四则运算
    结对编程
    关于问卷调查的心得体会
  • 原文地址:https://www.cnblogs.com/wuxl360/p/5787884.html
Copyright © 2020-2023  润新知