天天生鲜项目(三)

商品模块

 

首页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 banner in goods_banner %}
  • 幻灯片
  • {% endfor %}
    {% for banner in promotion_banners %} {% endfor %}
    {% for type in types %}

    {{ type.name }}

    | {% for banner in type.title_banner %} {{ banner.sku.name }} {% endfor %}
    查看更多 >
      {% for banner in type.image_banner %}
    • 草莓

      ¥ {{ banner.sku.price }}
    • {% endfor %}
    {% endfor %} {% block bottomfiles %} {% load staticfiles %} {% endblock bottomfiles %} {% endblock body %}

      

     

    购物车商品数目

    什么时候增加购物车记录?

      点加入购物车的时候

    什么时候需要获取购物车记录

      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中增加购物车数据‘

    <Django>天天生鲜项目(三)_第1张图片 

    登录后

    <Django>天天生鲜项目(三)_第2张图片

    首页优化,生成静态页面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

     

      

     

     

     

     

     

     

     

     

      

      

     

    你可能感兴趣的:(天天生鲜项目(三))