本节将实现项目移动端的点餐操作模块:即添加、浏览、删除、修改和清空等菜品购物车操作。
实现如上效果,点击每个菜品,购物车添加,展示,最后支付。
实现步骤:
创建并编辑购物车视图文件cart.py
配置移动端店铺点餐操作路由信息
编辑移动端首页输出模板文件
========================================================================
(1)创建点餐操作视图文件
-
在mobile应用中的views目录下创建一个购物车操作视图文件cart.py
-
编辑此视图文件:
mobile/views/cart.py
代码如下:
from django.shortcuts import render
from django.http import HttpResponse
from django.http import JsonResponse
from myadmin.models import Product
# 购物车信息管理
def add(request):
'''添加购物车'''
#尝试从session中获取名字为cartlist的购物车信息,若没有返回{}
cartlist = request.session.get("cartlist",{})
# 获取要购买的菜品信息
pid = request.GET.get("pid",None)
if pid is not None:
product = Product.objects.get(id=pid).toDict()
product['num'] = 1 #初始化当前菜品的购买量
#判断购物车中是否已存在要购买的商品
if pid in cartlist:
cartlist[pid]['num'] += product['num'] #累加购买量
else:
cartlist[pid] = product
#将购物车中的商品信息放回到session中
request.session['cartlist'] = cartlist
#响应json格式的购物车信息
return JsonResponse({'cartlist':cartlist})
def delete(request):
'''删除购物车中的商品'''
cartlist = request.session['cartlist']
del cartlist[pid]
request.session['cartlist'] = cartlist
#响应json格式的购物车信息
return JsonResponse({'cartlist':cartlist})
def clear(request):
'''清空购物车'''
request.session['cartlist'] = {}
#响应json格式的购物车信息
return JsonResponse({'cartlist':{}})
def change(request):
'''购物车信息修改'''
cartlist = request.session['cartlist']
shopid = request.GET.get("pid",0)
num = int(request.GET.get('num',1))
if num < 1:
num = 1
cartlist[shopid]['num'] = num
request.session['cartlist'] = cartlist
#响应json格式的购物车信息
return JsonResponse({'cartlist':cartlist})
(2). 配置项目中购物车urls路由信息
- 打开根路由文件:myobject/mobile/urls.py路由文件,编辑路由配置信息:
from django.urls import path
from mobile.views import index
from mobile.views import cart
from mobile.views import member
urlpatterns = [
path('', index.index, name="mobile_index"), #移动首页
# 移动端会员注册/登录路由
path('register', index.register, name="mobile_register"),
path('doregister', index.doregister, name="mobile_doregister"),
# 选择商铺
path('shop', index.shop, name="mobile_shop"),
path('shop/select', index.selectShop, name="mobile_select_shop"),
# 购物车信息管理路由配置
path('cart/add', cart.add, name="mobile_cart_add"),
path('cart/del', cart.delete, name="mobile_cart_del"),
path('cart/clear', cart.clear, name="mobile_cart_clear"),
path('cart/change', cart.change, name="mobile_cart_change"),
# 处理订单
path('orders/add', index.addOrders, name="mobile_orders_add"),
#