Django框架(十二)--电商项目修改

电商项目

卖家/买家

搜索框

视图

修改goods_list视图,添加模糊查询功能

import math
def goods_list(request):
    '''
    如果req_type==findall
        是查看更多的功能
    如果req_type==search
        是模糊查询的功能
    '''
    keywords=request.GET.get('keywords')
    req_type=request.GET.get('req_type')
    if req_type=='findall':
        goods_type=GoodsType.objects.get(id=keywords)
        goods = goods_type.goods_set.all()
    elif req_type=='search':
        goods = Goods.objects.filter(goods_name__contains=keywords)
    comment = goods.order_by('goods_price')[:math.ceil(len(goods) / 5)]
    return render(request,'buyer/goods_list.html',locals())

模板

修改index.html内查看更多处的路由
在这里插入图片描述

编写base.html内搜索框

在这里插入图片描述
在这里插入图片描述

修改goods_list.html
在这里插入图片描述

商品详情页

goods_detail.html

使用get请求传参

视图

在这里插入图片描述

路由

在这里插入图片描述

模板

index.html
在这里插入图片描述

goods_detail.html

{% extends 'buyer/base.html' %}
{% block title %}
  商品详情页
{% endblock %}
{% block content %}
  <div class="breadcrumb">
		<a href="#">全部分类</a>
		<span>></span>
		<a href="#">新鲜水果</a>
		<span>></span>
		<a href="#">商品详情</a>
	</div>
  <div class="goods_detail_con clearfix">
		<div class="goods_detail_pic fl"><img style="height: 100%;width: 100%;" src="/static/{{ good.picture }}"></div>

		<div class="goods_detail_list fr">
			<h3>{{ good.goods_name }}</h3>
			<p>草莓浆果柔软多汁,味美爽口,适合速冻保鲜贮藏。草莓速冻后,可以保持原有的色、香、味,既便于贮藏,又便于外销。</p>
			<div class="prize_bar">
				<span class="show_pirze">¥<em id="price">{{ good.goods_price }}</em></span>
        <span class="show_unit">单  位:500g</span>
			</div>
			<div class="goods_num clearfix">
				<div class="num_name fl">数 量:</div>
				<div class="num_add fl">
					<input id="num" type="number" class="num_show fl" value="1">
					<a id="add" class="add fr">+</a>
					<a id="reduce" class="minus fr">-</a>
				</div>
			</div>
			<div class="total">总价:<em id="total">{{ good.goods_price }}元</em></div>
			<div class="operate_btn">
				<a id="buynow" class="buy_btn">立即购买</a>
				<a href="javascript:;" class="add_cart" id="add_cart">加入购物车</a>
			</div>
		</div>
	</div>
  <div class="main_wrap clearfix">
		<div class="l_wrap fl clearfix">
			<div class="new_goods">
				<h3>新品推荐</h3>
				<ul>
					<li>
						<a href="#"><img src="/static/buyer/images/goods/goods001.jpg"></a>
						<h4><a href="#">进口柠檬</a></h4>
						<div class="prize">¥3.90</div>
					</li>
					<li>
						<a href="#"><img src="/static/buyer/images/goods/goods002.jpg"></a>
						<h4><a href="#">玫瑰香葡萄</a></h4>
						<div class="prize">¥16.80</div>
					</li>
				</ul>
			</div>
		</div>

		<div class="r_wrap fr clearfix">
			<ul class="detail_tab clearfix">
				<li class="active">商品介绍</li>
				<li>评论</li>
			</ul>

			<div class="tab_content">
				<dl>
					<dt>商品详情:</dt>
					<dd>草莓采摘园位于北京大兴区 庞各庄镇四各庄村 ,每年1月-6月面向北京以及周围城市提供新鲜草莓采摘和精品礼盒装草莓,草莓品种多样丰富,个大香甜。所有草莓均严格按照有机标准培育,不使用任何化肥和农药。草莓在采摘期间免洗可以直接食用。欢迎喜欢草莓的市民前来采摘,也欢迎各大单位选购精品有机草莓礼盒,有机草莓礼盒是亲朋馈赠、福利送礼的最佳选择。 </dd>
				</dl>
			</div>

		</div>
	</div>
{% endblock %}
{% block script %}
  <script>
    $('#add').click(
        function () {
            var price=parseFloat($('#price').text());
            var num = parseInt($('#num').val());
            num+=1;
            $('#num').val(num);
            total=price*num;
            $('#total').text(parseFloat(total)+'元');
        }
    );
    $('#reduce').click(
        function () {
            var price=parseFloat($('#price').text());
            var num = parseInt($('#num').val());
            num-=1;
            if(num<=1){
                num=1;
            }
            $('#num').val(num);
            total=price*num;
            $('#total').text(parseFloat(total)+'元');
        }
    );
    $('#buynow').click(
        function () {
          url='/Buyer/place_order/?goods_id='+{{ good.id }}+'&goods_count='+$('#num').val();
          window.location.href=url;
        }
    );
  </script>
{% endblock %}

增加用户中心页面

路由

在这里插入图片描述

视图

在这里插入图片描述

模板

在这里插入图片描述

制作user_center_info.html

暂时不渲染动态数据

订单

订单表

  • 订单编号 唯一不可空
  • 订单日期 创建订单的时间
  • 订单状态
    • 未支付
    • 已支付
    • 待发货
    • 待收货
    • 完成
    • 拒收
  • 订单总价
  • 订单用户

订单详情表

  • 订单编号
  • 商品id
  • 商品图片
  • 商品名称
  • 商品的购买数量
  • 商品的单价
  • 商品的小计
  • 店铺id

创建模型

增加goods_price字段的原因:

当商品价格变化的时候,已经生成的订单的单价是不能够随着商品的价格的变化而变化的,因此,商品的单价不能够使用外键,从商品表中获取,而应该是在下订单的时候,获取当时商品的价格,并保存在生成的订单详情中。

from django.db import models
from Saller.models import *

# 订单表
class PayOrder(models.Model):
    order_number = models.CharField(unique=True,max_length=32,verbose_name='订单编号')
    order_date = models.DateField(auto_now=True,verbose_name='订单日期')
    '''
    0:未支付
    1:已支付
    2:待发货
    3:待收货
    4:完成
    5:拒收
    '''
    order_status = models.IntegerField(verbose_name='订单状态')
    order_total = models.FloatField(verbose_name='订单总价')
    order_user = models.ForeignKey(to=LoginUser,on_delete=models.CASCADE,verbose_name='订单用户')

# 订单详情表
class OrderInfo(models.Model):
    order_id = models.ForeignKey(to=PayOrder,on_delete=models.CASCADE,verbose_name='订单表外键')
    goods = models.ForeignKey(to=Goods,on_delete=models.CASCADE,verbose_name='商品表')
    goods_count = models.IntegerField(verbose_name='商品数量')
    goods_total_price = models.FloatField(verbose_name='商品小计')
    goods_price=models.FloatField(verbose_name='商品单价')
    store_id = models.ForeignKey(to=LoginUser,on_delete=models.CASCADE,verbose_name='店铺id')

模板

在这里插入图片描述

place_order.html

{% extends 'buyer/base.html' %}
{% block content %}
  <h3 class="common_title">确认收货地址</h3>

	<div class="common_list_con clearfix">
		<dl>
			<dt>寄送到:</dt>
			<dd><input type="radio" name="" checked="">北京市 海淀区 东北旺西路8号中关村软件园 (李思 收) 182****7528</dd>
		</dl>
		<a href="user_center_site.html" class="edit_site">编辑收货地址</a>

	</div>

	<h3 class="common_title">支付方式</h3>
	<div class="common_list_con clearfix">
		<div class="pay_style_con clearfix">
			<input type="radio" name="pay_style" >
			<label class="cash">货到付款</label>
			<input type="radio" name="pay_style">
			<label class="weixin">微信支付</label>
			<input type="radio" name="pay_style" checked>
			<label class="zhifubao"></label>
			<input type="radio" name="pay_style">
			<label class="bank">银行卡支付</label>
		</div>
	</div>

	<h3 class="common_title">商品列表</h3>

	<div class="common_list_con clearfix">
		<ul class="goods_list_th clearfix">
			<li class="col01">商品名称</li>
			<li class="col02">商品单位</li>
			<li class="col03">商品价格</li>
			<li class="col04">数量</li>
			<li class="col05">小计</li>
		</ul>
    {% for one in payorder.orderinfo_set.all %}
		<ul class="goods_list_td clearfix">
			<li class="col01">1</li>
			<li class="col02"><img src="/static/{{ one.goods.picture }}"></li>
			<li class="col03">{{ one.goods.goods_name }}</li>
			<li class="col04">500g</li>
			<li class="col05">{{ one.goods_price }}元</li>
			<li class="col06">{{ one.goods_count }}</li>
			<li class="col07">{{ one.goods_total_price }}元</li>
		</ul>
    {% endfor %}
	</div>

	<h3 class="common_title">总金额结算</h3>

	<div class="common_list_con clearfix">
		<div class="settle_con">
			<div class="total_goods_count"><em>{{ total_count }}</em>件商品,总金额<b>{{ payorder.order_total }}</b></div>
			<div class="transit">运费:<b>0元</b></div>
			<div class="total_pay">实付款:<b>{{ payorder.order_total }}元</b></div>
		</div>
	</div>

	<div class="order_submit clearfix">
		<a href="javascript:;" id="order_btn">提交订单</a>
	</div>
{% endblock %}

视图

import time
@loginValid
def place_order(request):
    goods_id = request.GET.get('goods_id')
    goods_count = request.GET.get('goods_count')
    user_id = request.COOKIES.get('userid')
    if goods_id and goods_count:
        goods_id=int(goods_id)
        goods_count=int(goods_count)
        goods = Goods.objects.get(id=goods_id)
        payorder = PayOrder()
        order_number=str(time.time()).replace('.','')
        payorder.order_number=order_number
        payorder.order_status=0
        payorder.order_total=goods.goods_price*goods_count
        payorder.order_user=LoginUser.objects.get(id=user_id)
        payorder.save()
        orderinfo = OrderInfo()
        orderinfo.order_id=payorder
        orderinfo.goods=goods
        orderinfo.goods_count = goods_count
        orderinfo.goods_price=goods.goods_price
        orderinfo.goods_total_price = goods.goods_price*goods_count
        orderinfo.store_id=goods.goods_store
        orderinfo.save()

        total_count=0
        all_infos=payorder.orderinfo_set.all()
        for one in all_infos:
            total_count+=one.goods_count
    return render(request,'buyer/place_order.html',locals())

路由

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章