商品模块
首页index--view
from django.shortcuts import render # 类视图 from django.views.generic import View from .models import GoodsType, IndexGoodsBanner, IndexPromotionBanner, IndexTypeGoodsBanner # Create your views here. # http://127.0.0.1:8000 class IndexView(View): '''首页''' def get(self, request): '''显示首页''' # 获取商品种类信息 types = GoodsType.objects.all() # 获取首页轮播信息 goods_banners = IndexGoodsBanner.objects.all().order_by('index') # 获取首页促销活动信息 promotion_banners = IndexPromotionBanner.objects.all().order_by('index') # 获取首页分类展示信息 # type_goods_banners = IndexTypeGoodsBanner.objects.all() for type in types: # GoodsType # 获取type种类首页分类商品图片展示信息 image_banner = IndexTypeGoodsBanner.objects.filter(type=type, display_type=1).order_by('index') # 获取type种类首页分类商品文字展示信息 title_banner = IndexTypeGoodsBanner.objects.filter(type=type, display_type=0).order_by('index') # 动态给type增加属性,增加图片展示信息和文字展示信息 type.image_banner = image_banner type.title_banner = title_banner # 获取用户购物车商品数目 cart_count = 0 # 组织模板上下文 context = { 'types': types, 'goods_banners': goods_banners, 'promotion_banners': promotion_banners, 'cart_count': cart_count, } # 使用模板 return render(request, 'goods/index.html', context)
urls
from django.conf.urls import url from . import views from .views import IndexView urlpatterns=[ url(r'^$', IndexView.as_view(),name='index'), url(r'^index$', IndexView.as_view(),name='index'), ]
index.html
{% extends 'base.html' %} {% block title %}天天生鲜-首页{% endblock title %} {% load staticfiles %} {% block body %} {% for type in types %}{% endfor %} {% block bottomfiles %} {% load staticfiles %} {% endblock bottomfiles %} {% endblock body %}{% for banner in type.image_banner %}
- {% endfor %}
草莓
¥ {{ banner.sku.price }}
购物车商品数目
什么时候增加购物车记录?
点加入购物车的时候
什么时候需要获取购物车记录
index,cart 使用到购物车中的数据或访问购物车的时候
使用什么存储购物车记录---操作数量太多,
redis
存储购物车的格式
一个用户的购物车用一条记录保存
hash
cart_用户id:{'商品id':商品数量}
获取购物车商品的条目数:使用hlen
view
# 购物车数量-链接redis
from django_redis import get_redis_connection
# 获取用户购物车商品数目 user = request.user cart_count = 0 if user.is_authenticated(): # 用户已登录 conn = get_redis_connection('default') cart_key = 'cart_%d'%user,id cart_count = conn.hlen(cart_key)
base.html
{{ cart_count }}
在redis中增加购物车数据‘
登录后
首页优化,生成静态页面celery
什么时候需要重新生成---当管理员更新,修改,删除的表格中的数据后
task
详情页,views
from django.shortcuts import render,redirect from django.core.urlresolvers import reverse # 类视图 from django.views.generic import View from .models import GoodsType,GoodsSKU,IndexGoodsBanner, IndexPromotionBanner, IndexTypeGoodsBanner # 购物车数量-链接redis from django_redis import get_redis_connection # 评论信息models from order.models import OrderGoods # /goods/商品ID class DetailView(View): '''详情页''' def get(self,request,goods_id): # 防止查不到 try: sku = GoodsSKU.objects.get(id=goods_id) except GoodsSKU.DoesNotExist: # 商品不存在 return redirect(reverse('goods:index')) # 获取商品的分类信息 types = GoodsType.objects.all() # 获取商品的评论信息 sku_orders = OrderGoods.objects.filter(sku=sku).exclude(comment='' ) # 获取新品信息--降序 new_skus = GoodsSKU.objects.filter(type=sku.type).order_by('-create_time') # 购物车信息,和首页一样 # 获取用户购物车商品数目 user = request.user cart_count = 0 if user.is_authenticated(): # 用户已登录 conn = get_redis_connection('default') cart_key = 'cart_%d'%user.id cart_count = conn.hlen(cart_key) # 组织模板上下文 context = { 'sku': sku, 'types': types, 'sku_orders': sku_orders, 'new_skus': new_skus, 'cart_count': cart_count, } return render(request,'goods/detail.html',context)
urls
from django.conf.urls import url from . import views from .views import IndexView,DetailView urlpatterns=[ url(r'^$', IndexView.as_view(),name='index'), url(r'^index$', IndexView.as_view(),name='index'), url(r'^goods/(?P\d+)$', DetailView.as_view(),name='detail'), # 详情页 ]
base_detail_list.html---菜单都在父模板里面
{# 详情页,列表页模板 #} {% extends 'base.html' %} {% block body %}{# 详情页,列表页主体内容块 #} {% block main_content %}{% endblock main_content %} {% endblock body %}
detail.html