電商項目
賣家/買家
搜索框
視圖
修改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())