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())

路由

在這裏插入圖片描述

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