电商项目
卖家/买家
搜索框
视图
修改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())