zoukankan      html  css  js  c++  java
  • <Django>天天生鲜项目(三)

    商品模块

     

    首页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 %}
    
    	<div class="navbar_con">
    		<div class="navbar">
    			<h1 class="fl">全部商品分类</h1>
    			<ul class="navlist fl">
    				<li><a href="">首页</a></li>
    				<li class="interval">|</li>
    				<li><a href="">手机生鲜</a></li>
    				<li class="interval">|</li>
    				<li><a href="">抽奖</a></li>
    			</ul>
    		</div>
    	</div>
    
    	<div class="center_con clearfix">
    		<ul class="subnav fl">
                {% for type in types %}
    			    <li><a href="#model0{{ forloop.counter }}" class="{{ type.logo }}">{{ type.name }}</a></li>
                {% endfor %}
    		</ul>
    		<div class="slide fl">
    			<ul class="slide_pics">
                    {% for banner in goods_banner %}
    				    <li><a href="#"><img src="{{ banner.image.url }}" alt="幻灯片"></a></li>
                    {% endfor %}
    			</ul>
    			<div class="prev"></div>
    			<div class="next"></div>
    			<ul class="points"></ul>
    		</div>
    		<div class="adv fl">
                {% for banner in promotion_banners %}
    			    <a href="{{ banner.url }}"><img src="{{ banner.image.url }}"></a>
    		    {% endfor %}
            </div>
    	</div>
        {% for type in types %}
    	<div class="list_model">
    		<div class="list_title clearfix">
    			<h3 class="fl" id="model0{{ forloop.counter }}">{{ type.name }}</h3>
    			<div class="subtitle fl">
    				<span>|</span>
                     {% for banner in type.title_banner %}
    				<a href="#">{{ banner.sku.name }}</a>
                     {% endfor %}
    			</div>
    			<a href="#" class="goods_more fr" id="fruit_more">查看更多 ></a>
    		</div>
    
    		<div class="goods_con clearfix">
    			<div class="goods_banner fl"><img src="{{ type.image.url }}"></div>
    			<ul class="goods_list fl">
                    {% for banner in type.image_banner %}
    				<li>
    					<h4><a href="#">草莓</a></h4>
    					<a href="#"><img src="{{ banner.sku.image.url }}"></a>
    					<div class="prize">¥ {{ banner.sku.price }}</div>
    				</li>
                    {% endfor %}
    			</ul>
    		</div>
    	</div>
        {% endfor %}
    
    
    
    {% block bottomfiles %}
        {% load staticfiles %}
    	<script type="text/javascript" src="{% static 'js/slide.js' %}"></script>
    	<script type="text/javascript">
    		BCSlideshow('focuspic');
    		var oFruit = document.getElementById('fruit_more');
    		var oShownum = document.getElementById('show_count');
    
    		var hasorder = localStorage.getItem('order_finish');
    
    		if(hasorder)
    		{
    			oShownum.innerHTML = '2';
    		}
    
    		oFruit.onclick = function(){
    			window.location.href = 'list.html';
    		}
    	</script>
    {% 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

    			<div class="goods_count fl" id="show_count">{{ cart_count }}</div>
    

     

    在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<goods_id>d+)$', DetailView.as_view(),name='detail'), # 详情页
    ]
    

    base_detail_list.html---菜单都在父模板里面

    {# 详情页,列表页模板 #}
    {% extends 'base.html' %}
    
    {% block body %}
    
        <div class="navbar_con ">
    		<div class="navbar clearfix">
                <div class="navbar_con fl">
                    <h1>全部商品分类</h1>
                    <span></span>
                    <ul class="subnav">
                        {% for type in types %}
                        <li><a href="#" class="{{ type.logo }}">{{ type.name }}</a></li>
                        {% endfor %}
                    </ul>
                </div>
    
    
                <ul class="subnav">
    
                </ul>
    
    			<ul class="navlist fl">
    				<li><a href="">首页</a></li>
    				<li class="interval">|</li>
    				<li><a href="">手机生鲜</a></li>
    				<li class="interval">|</li>
    				<li><a href="">抽奖</a></li>
    			</ul>
    		</div>
    	</div>
        {#  详情页,列表页主体内容块  #}
        {% block main_content %}{% endblock main_content %}
    {% endblock body %}
    

      

    detail.html

      

     

      

      

  • 相关阅读:
    JAVA 异常
    JAVA 接口的基本语法
    JAVA 访问权限
    Linux shell 函数应用示例02
    Linux shell 函数应用示例01
    Linux shell while循环语句
    Linux shell 中断循环语句
    Linux shell for循环结构
    测试用例基本概念
    软件测试原则
  • 原文地址:https://www.cnblogs.com/shuimohei/p/13174591.html
Copyright © 2011-2022 走看看