商城的分類查詢主要用于展示一個(gè)一級(jí)分類列表,通過(guò)一級(jí)分類列表提供的分類ID(作為參數(shù)),跳轉(zhuǎn)到商品控制器中進(jìn)行商品查詢。
分類查詢主要是通過(guò)分類列表進(jìn)行跳轉(zhuǎn)的。分類主頁(yè)的控制器SortsController 的設(shè)計(jì)代碼如下所示:
@Restcontroller
@RequestMapping( "/sorts")
public class SortsController {
CAutowired
private SortsRestService sortsRestService;
@RequestMapping(value="/index")
public ModelAndview findAll() {
Gson gson=TreeMapConvert.getGson();
List<SortsQo> sortses=gson.fromJson(sortsRestService.findist (),new
TypeToken<List<SortsQ0>>(){].getType());
return new ModelAndView ( "sorts/index", "sortses",sortses);}
}
即通過(guò)鏈接“l(fā)index”所在的方法中,取得分類列表數(shù)據(jù),然后返回分類主頁(yè)視圖設(shè)計(jì)“index.html”。
分類主頁(yè)視圖設(shè)計(jì)是一個(gè)H5單頁(yè),主體部分的實(shí)現(xiàn)代碼如下所示:
<section class="orderList">
<ul th:each-"sorts: ${sortses} ">
<li th:onclick=" 1javascript:gotoGoods ('+$ {sorts.id}+');'">
<div class-"orderInfList">
<div class="orderInfTxtclearPb">
<p><a th:href=" '/goods/index?sortsid='+${sorts.id}"
th:text="${sorts.name) "></a></p>
</div>
</div>
</li>
</ul></section>
這里只是簡(jiǎn)單地使用一個(gè)“th:each”循環(huán)語(yǔ)句,將一級(jí)分類列表逐條進(jìn)行顯示。當(dāng)在操作界面上單擊一個(gè)分類時(shí),將使用分類ID作為參數(shù),跳轉(zhuǎn)到商品控制器設(shè)計(jì)中進(jìn)行商品查詢。
分類查詢的顯示效果如圖9-2所示。
首先通過(guò)控制器調(diào)用商品服務(wù)接口GoodsRestService的 findByld獲取數(shù)據(jù),然后返回一個(gè)頁(yè)面視圖設(shè)計(jì)“show.html”,其中,控制器的實(shí)現(xiàn)代碼如下所示:
@RestController
@RequestMapping ( "/goods")
public class GoodsController {
@Autowired
private GoodsRestService goodsRestService;
@RequestMapping (value="/{id} "')
public ModelAndView findById (@Pathvariable Long id)
String json=goodsRestService. findById(id);
GoodsQo goodsQo=new Gson().fromJson(json, GoodsQo.class);return new ModelAndView ("goods/show", "goods",goodsQ0);
}
}
頁(yè)面視圖設(shè)計(jì)“show.html”是一個(gè)H5單頁(yè),實(shí)現(xiàn)代碼如下所示:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8"/>
<meta content="yes" name="apple-mobile-web-app-capable"/>
<meta content="black" name="apple-mobile-web-app-status-bar-style"<meta name="format-detection" content="telephone=no"/>
<title>商品內(nèi)容</title>
<link th:href="@{/styles/main.css}" rel="stylesheet" type="text/css"<style type="text/css">
article,aside,dialog, footer,header,section, footer,nav,figure,menuldisplay:block }
</style>
<script th:src="@{/scripts/jquery-1.10.2.min.js}"></script><script th:src="@{/scripts/viewscale.js}"></script>
</head>
<body>
<div class="swiper-container" style="height: 450px;">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img th:src="${ goods.photo}"/></div>
</div></div>
<div class="spxg prize">
<div class="intro" th:text="${ goods.name}">商品名稱</div><div class="info">
<span class="prize">
<em>價(jià)格:¥</em><em id="priceShowl" original="0.1"
th:text="${goods.price} ">67</em>
/span>
</div>
</div>
<div class="contents">
<div class="abstract"></div>
<div th:text="${goods.contents} "></div>
</div>
<div class="fix-bottom-buy">
<input id="goodsid" name="goodsid" type="hidden"
th:value="${goods.id} "/>
<div class="col-2">
<a id="addCartBtn" href="javascript:void(0)"
onclick="history.back();"class="btn white">返回商城</a>
<a id="buyNowBtn" th:href=" ' /order/accounts/'+${goods.id}"
class="btn red">立即購(gòu)買</a>
</div>
</div></body></html>
詳情頁(yè)顯示了商品的詳細(xì)信息,并且提供了“立即購(gòu)買”的跳轉(zhuǎn)鏈接。單擊“立即購(gòu)買”按鈕后將進(jìn)行用戶登錄狀態(tài)檢查。
商品詳情頁(yè)設(shè)計(jì)完成之后,顯示效果如圖9-3所示。
當(dāng)用戶在商品詳情頁(yè)中單擊“立即購(gòu)買”按鈕之后,將調(diào)用OrderController控制器,代碼如下所示:
@RestController
@RequestMapping ("/order")@slf4j
public class OrderController {
@Autowired
private GoodsRestService goodsRestService;
@ReguestMapping (value=" /accounts/{id} ")
public ModelAndView accounts (ModelMap model, (PathVariable Long id)(
String json=goodsRestService.findById(id);
GoodsQo goodsQo=new Gson ().fromJson(json,GoodsQo.class);return new ModelAndView( "order/accounts", "goods", goodsQ0);
}
}
首先通過(guò)商品ID取得商品信息,然后,返回一個(gè)賬號(hào)視圖設(shè)計(jì)。在這個(gè)視圖設(shè)計(jì)中,一方面顯示商品的價(jià)格,另一方面進(jìn)行用戶登錄狀態(tài)檢查。
賬號(hào)視圖設(shè)計(jì)“accounts.html”是一個(gè)H5單頁(yè),完整的實(shí)現(xiàn)代碼如下所示:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8"/>
<meta content="yes" name="apple-mobile-web-app-capable"/>
<meta content="black" name="apple-mobile-web-app-status-bar-style"/><meta name="format-detection" content="telephone=no"/>
<title>結(jié)算</title>
<link th:href="G{/styles/microApply.css}" rel="stylesheet"
type="text/css"/>
<link th:href="@{/styles/globalWap.css}" rel="stylesheet"
type="text/css"/>
<style type="text/css">
article,aside,dialog, footer, header, section, footer, nav, figure
menu{display:block}
</style>
<script th:src="@{/scripts/viewscale.js}"></script>
<script th:src="@(/scripts/jquery-1.10.2.min.js}"></script><script th:srC="@ {/scripts/Event_alert.js}"></script>
</head>
<body>
<div class="content prompt1">
<div class=" verifyErrO">
<span></span>
</diV>
<div class="sure"><input class="longinBtn" type="submit" value="確定
" /></div>
</div>
<input id="goodsid" name="goodsid" type="hidden"
th:value="${goods.id] "/>
<input id="merchantid" name="goodsid" type="hidden"
th:value="${goods.merchantid}"/>
<div class="content prompt2">
<div class="verifyErro">
<span></span>
<p class="swit" th:text="'訂單金額:¥'+(${ goods.price} ?
$ {#numbers.formatDecimal (goods.price,0,'COMMA',2,'POINT')}:'')">確認(rèn)購(gòu)買嗎?</p>
<p class="countdown"></p></div>
<div class="sure">xinput class="accountsBtn" type="submit" value="
確定"/></div>
</div>
<div class="copy">關(guān)于我們</div></body>
<script>
/*<![CDATA[*/$(function(){
var storage=window. localStorage;var user=storage.getItem ("user");var userid;
var goodsid=$('#goodsid').val();
var merchantid=$('#merchantid').val();
if(user){
var a=JSON.parse(user);userid=a.userid;
//console. log (a.userid);$('.prompt1').hide ();
$('.prompt2 ').show();
}else {
$('.prompt2 ').hide();$('.prompt1') .show();
$('.longinBtn').click (function(){
$(' .accountsBtn').click(function(){
$.ajax({
url:"../buyone" ,data:{
id:goodsid,subsid:userid,
merchantid:merchantid},
type: "POST",
dataType: "json",
success: function(data){
if(data && (parseInt (data) >0)){
alertEC("購(gòu)買成功!");
}else{
alertEC("下單失敗!");
});
setTimeout(function(){
window . location.href="../index";}, 600);
});
});
/*]]>*/</script></html>
在這個(gè)設(shè)計(jì)中,首先對(duì)用戶的賬號(hào)進(jìn)行檢查。如果是未登錄狀態(tài),則轉(zhuǎn)到登錄頁(yè)面提示用戶登錄。
如果用戶已經(jīng)登錄,則提示用戶確認(rèn)購(gòu)買,然后執(zhí)行購(gòu)買下單的操作。如果下單成功,則提示“購(gòu)買成功”,并從操作界面跳轉(zhuǎn)到訂單列表頁(yè)面。
注意:這里為了“跑通”整個(gè)下單的操作流程,省略了支付的環(huán)節(jié)。
用戶進(jìn)行購(gòu)買下單的操作是通過(guò)控制器OrderController實(shí)現(xiàn)的,代碼如下所示:
@RestController
@RequestMapping ( "/order")@slf4j
public class OrderController {
@Autowired
private OrderRestService orderRestService;CAutowired
private GoodsRestService goodsRestService;
@RequestMapping(value="/buyone", method=RequestMethod. POST)public String buyone (GoodsQo buyone){
String json=goodsRestService.findById (buyone.getId());GoodsQo goodsQ0=new Gson().fromJson(json,GoodsQo.class);if(goodsQ0 !=null){
Integer sum=1;
OrderDetailQ0 orderDetailQ0=new OrderDetailQ0();orderDetailQ0.setGoodsid(goodsQo.getId());
orderDetailQo.setGoodsname(goodsQo.getName());orderDetai1Qo.setPrice(goodsQo.getPrice());orderDetailQ0.setPhoto (goodsQo.getPhoto());orderDetailQo.setNums(sum);
orderDetailQ0.setMoney(sum * goodsQo.getPrice());
List<0rderDetailQ0> list=new ArrayList<>();
1ist .add(orderDetailQ0);
OrderQo orderQ0=new OrderQo();orderQo.setOrder Details(list);//借用分類ID來(lái)傳輸用戶編號(hào)
orderQo.setUserid (buyone.getSubsid());
orderQo.setMerchantid(goodsQo.getMerchantid());orderQo.setAmount(sum *goodsQo.getPrice());
orderQo.setOrderNo (new Long ( (new Date()).getTime()).toString()//已付款
orderQo. setStatus (StatusEnum. PAID.getCode());orderQo.setCreated(new Date());
String response=orderRestService.create (orderQo);
1oa.info ( "====下單結(jié)果:"+response);
//更新庫(kù)存
if(response !=null) {
Integer buynum=goodsQo.getBuynum()==null ? sum : sum
goodsQ0 .getBuynum();
goodsQo.setBuynum (buynum);
goodsRestService. update(goodsQo);//下單成功
return "1";
}else{
//下單失敗
return "-1";
}
//系統(tǒng)異常return "-2";
}
}
首先獲取商品信息和用戶信息,然后根據(jù)這些信息,調(diào)用訂單服務(wù)接口創(chuàng)建一個(gè)新訂單,最后調(diào)用商品服務(wù)接口更新庫(kù)存信息。
如果下單成功,則通過(guò)上面的視圖設(shè)計(jì),提示下單成功。提示信息會(huì)停留600ms,隨后自動(dòng)跳轉(zhuǎn)到訂單的主頁(yè)中。在訂單主頁(yè)中用戶可以看到訂單列表。
客目錄:
......
十、基于Django+mysql的點(diǎn)餐系統(tǒng)設(shè)計(jì)-第十篇(H5手機(jī)移動(dòng)端點(diǎn)餐:登錄)
十一、基于Django+mysql的點(diǎn)餐系統(tǒng)設(shè)計(jì)-第十一篇(H5手機(jī)移動(dòng)端點(diǎn)餐:購(gòu)物車操作)
十二、基于Django+mysql點(diǎn)餐系統(tǒng)設(shè)計(jì)-第十二篇(移動(dòng)端:會(huì)員下單處理)
本章源碼下載地址:https://github.com/hopeSuceess/testorder/tree/testorder_20220622_01
上一篇講了購(gòu)物車操作,緊接著上一篇繼續(xù)講新增購(gòu)物車后,這些餐品的下單操作。首先在Model層定義數(shù)據(jù)庫(kù)表,在myadmin/models.py中編寫如下代碼:
# 訂單模型
class Orders(models.Model):
shop_id=models.IntegerField() # 店鋪id號(hào)
member_id=models.IntegerField() # 會(huì)員id
user_id=models.IntegerField() # 操作員id
money=models.FloatField() # 金額
status=models.IntegerField(default=1) #訂單狀態(tài):1進(jìn)行中/2無(wú)效/3已完成
payment_status=models.IntegerField(default=1) # 支付狀態(tài):1未支付/2已支付/3已退款
create_at=models.DateTimeField(default=datetime.now) # 創(chuàng)建時(shí)間
update_at=models.DateTimeField(default=datetime.now) # 修改時(shí)間
class Meta:
db_table="orders" # 更改表名
# 訂單詳情模型
class OrderDetail(models.Model):
order_id=models.IntegerField() #訂單id
# product_id=models.IntegerField() # 菜品id
product=models.ForeignKey('Product', on_delete=models.CASCADE) #多對(duì)一
product_name=models.CharField(max_length=50) # 菜品名稱
price=models.FloatField() # 單價(jià)
quantity=models.IntegerField() # 數(shù)量
status=models.IntegerField(default=1) #狀態(tài):1正常/9刪除
class Meta:
db_table="order_detail" # 更改表名
# 支付信息模型
class Payment(models.Model):
order_id=models.IntegerField() #訂單id號(hào)
member_id=models.IntegerField() #會(huì)員id
money=models.FloatField() #支付金額
type=models.IntegerField() # 付款方式:1會(huì)員付款/2收銀收款
bank=models.IntegerField(default=1) #收款銀行渠道:1微信/2余額/3現(xiàn)金/4支付寶
status=models.IntegerField(default=1) #支付狀態(tài):1未支付2/已支付/3已退款
create_at=models.DateTimeField(default=datetime.now) # 創(chuàng)建時(shí)間
update_at=models.DateTimeField(default=datetime.now) # 修改時(shí)間
class Meta:
db_table="payment" # 更改表名
定義完了數(shù)據(jù)庫(kù)表,開(kāi)始編寫路由控制器的邏輯,在mobile/urls.py中先定義加載移動(dòng)端訂單頁(yè)的路由邏輯
# 訂單處理
path('orders/add', index.addOrders, name="mobile_addorders"), # 加載移動(dòng)端訂單頁(yè)
定義完了路由邏輯,現(xiàn)在開(kāi)始寫view層的實(shí)現(xiàn)邏輯,在mobile/views/cart.py中編寫addOrders函數(shù)
def addOrders(request):
"""移動(dòng)端下單表單頁(yè)"""
# 嘗試從session中獲取名字為cartlist的購(gòu)物車信息,若沒(méi)有返回{}
cartlist=request.session.get('cartlist', {})
total_money=0 # 初始化一個(gè)總金額
# 遍歷購(gòu)物車中的菜品并累加總金額
for vo in cartlist.values():
total_money +=vo['num']*vo['price']
request.session['total_money']=total_money
return render(request, "mobile/addOrders.html")
view層實(shí)現(xiàn)的邏輯要渲染到前端,現(xiàn)在對(duì)template層進(jìn)行邏輯實(shí)現(xiàn),templates/mobile/addOrders.html中的代碼如下:
{% extends 'mobile/base.html' %}
{% load static %}
{% block mainbody %}
<!--頭部-->
<header>
<div class="header">
<h1>提交訂單</h1>
<a href="javascript:window.history.back();" class="return"><i></i></a>
</div>
</header>
<! --內(nèi)容區(qū)-->
<article class="main-container add-product">
<!--產(chǎn)品-->
<div class="list-content cartlist order-Pro">
<ul>
{% for vo in request.session.cartlist.values %}
<li class="line">
<a href="#"><div class="pro-img"><img src="{% static 'uploads/product/' %}{{ vo.cover_pic }}" alt=""></div></a>
<div class="pro-con"><h3>{{ vo.name }}</h3><b>¥{{ vo.price }}</b>×{{ vo.num }}</div>
</li>
{% endfor %}
</ul>
</div>
<!--支付方式-->
<div class="order-Delivery line" id="orderPays">
<p>支付方式</p>
<ol class="FilterContentList">
</ol>
<div class="list">
<ul class="line">
<li class="select" bank="4"><i class="icon-alipay"></i>支付寶支付<em class="icon-correct"></em></li>
<li bank="1"><i class="icon-weixinpay"></i>微信支付<em class="icon-correct"></em></li>
</ul>
</div>
</div>
<br><br>
</article>
<!---底部欄目-->
<footer>
<div class="button"><button onclick="doSubmit()">提交訂單</button></div>
<h4>實(shí)付款:¥{{ request.session.total_money }}</h4>
</footer>
{% endblock %}
{% block myjavascript %}
<script>
//支付方式上的單選按鈕點(diǎn)擊效果
$("ul.line li").click(function () {
$("ul.line li").removeClass("select");
$(this).addClass("select");
});
//執(zhí)行訂單提交操作函數(shù)
function doSubmit(){
{#bid=$("ul.line li.select").attr("bank"); // 獲取支付方式#}
{#window.location.href="{% url 'mobile_doaddorders' %}?bank="+bid;#}
window.location.href="{% url 'mobile_doaddorders' %}";
}
</script>
{% endblock %}
好了,現(xiàn)在啟動(dòng)工程調(diào)試一下,訪問(wèn)http://127.0.0.1:8000/mobile/,選擇菜品后,點(diǎn)擊"去結(jié)算",跳到了"提交訂單"頁(yè)
繼續(xù)往下寫,在提交訂單頁(yè)提交訂單,這里涉及了多個(gè)數(shù)據(jù)庫(kù)表的插入:訂單信息表、支付表、訂單詳情表,這三表里的信息在后續(xù)的查詢中都會(huì)用到。
在mobile/views/index.py中實(shí)現(xiàn)doAddOrders函數(shù)
def doAddOrders(request):
'''執(zhí)行移動(dòng)端下單操作'''
try:
#執(zhí)行訂單信息的添加
od=Orders()
od.shop_id=request.session['shopinfo']['id']
od.member_id=request.session['mobileuser']['id']
od.user_id=0
od.money=request.session['total_money']
od.status=1 #訂單狀態(tài):1進(jìn)行中/2無(wú)效/3已完成
od.payment_status=2 #支付狀態(tài):1未支付/2已支付/3已退款
od.create_at=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
od.update_at=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
od.save()
# 執(zhí)行支付信息添加
op=Payment()
op.order_id=od.id #訂單id號(hào)
op.member_id=request.session['mobileuser']['id']
op.type=2 #1會(huì)員付款/2收銀收款
op.bank=request.GET.get("bank", 3) # 收款銀行渠道:1微信/2余額/3現(xiàn)金/4支付寶
op.money=request.session['total_money']
op.status=2 # 支付狀態(tài):1未支付/2已支付/3已退款
op.create_at=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
op.update_at=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
op.save()
# 執(zhí)行訂單詳情的添加
cartlist=request.session.get("cartlist", {}) # 獲取購(gòu)物車中的菜品信息
# 遍歷購(gòu)物車中的菜品并添加到訂單詳情中
for item in cartlist.values():
ov=OrderDetail()
ov.order_id=od.id # 訂單id
ov.product_id=item['id'] # 菜品id
ov.product_name=item['name'] # 菜品名稱
ov.price=item['price'] # 單價(jià)
ov.quantity=item['num'] #數(shù)量
ov.status=1 # 狀態(tài):1正常/9刪除
ov.save()
del request.session['cartlist']
del request.session['total_money']
except Exception as err:
print(err)
return render(request,"mobile/orderinfo.html", {"order": od})
下面實(shí)現(xiàn)template層的邏輯,在templates/mobile目錄下創(chuàng)建orderinfo.html,orderinfo.html中的代碼邏輯如下:
#! -*- coding: UTF-8 -*-
#@Time : 2022/2/3 18:17
#@Author : 中國(guó)
#@File : index.py
#@Software : PyCharm
from datetime import datetime
from django.http import HttpResponse
from django.shortcuts import redirect, render
from django.urls import reverse
from myadmin.models import Category, Product, Shop, Member, Payment, OrderDetail, Orders
def index(request):
# # 接收到前端的處理邏輯,返回”歡迎來(lái)到大堂點(diǎn)餐!“
# return HttpResponse('歡迎來(lái)到手機(jī)移動(dòng)端點(diǎn)餐頁(yè)面!')
'''移動(dòng)端首頁(yè)'''
#獲取并判斷當(dāng)前店鋪信息
shopinfo=request.session.get("shopinfo", None)
if shopinfo is None:
return redirect(reverse("mobile_shop")) # 重定向到店鋪選擇頁(yè)
# 獲取當(dāng)前店鋪下的菜品類別和菜品信息
clist=Category.objects.filter(shop_id=shopinfo['id'],status=1)
productlist=dict()
for vo in clist:
plist=Product.objects.filter(category_id=vo.id, status=1)
productlist[vo.id]=plist
context={'categorylist': clist, 'productlist': productlist.items(), 'cid': clist[0]}
return render(request, "mobile/index.html", context)
def shop(request):
'''呈現(xiàn)店鋪選擇頁(yè)面'''
context={'shoplist': Shop.objects.filter(status=1)}
return render(request, 'mobile/shop.html', context)
def selectShop(request):
'''執(zhí)行店鋪選擇'''
# 獲取店鋪id號(hào),通過(guò)店鋪id號(hào)獲取店鋪信息
sid=request.GET['sid']
ob=Shop.objects.get(id=sid)
# 將店鋪信息放入到seession中
request.session['shopinfo']=ob.toDict()
return redirect(reverse('mobile_index'))
def register(request):
'''加載注冊(cè)/登錄頁(yè)面'''
return render(request, "mobile/register.html")
def doRegister(request):
'''執(zhí)行注冊(cè)/登錄'''
# 驗(yàn)證短信碼
verifycode="1234" # request.session['verifycode']
code=request.POST['code']
if verifycode !=code:
context={'info': '驗(yàn)證碼錯(cuò)誤'}
return render(request, "mobile/register.html", context)
try:
#根據(jù)手機(jī)號(hào)碼獲取當(dāng)前會(huì)員信息
member=Member.objects.get(mobile=request.POST['mobile'])
except Exception as err:
# 此處可以執(zhí)行當(dāng)前會(huì)員注冊(cè)(添加)
ob=Member()
ob.nickname="顧客" #默認(rèn)會(huì)員名稱
ob.avatar="moren.png" # 默認(rèn)頭像
ob.mobile=request.POST['mobile'] # 手機(jī)號(hào)碼
ob.status=1
ob.create_at=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
ob.update_at=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
ob.save()
member=ob
# 檢查當(dāng)前會(huì)員狀態(tài)
if member.status==1:
# 將當(dāng)前會(huì)員信息轉(zhuǎn)換成字典格式并存放到seession中
request.session['mobileuser']=member.toDict()
# 重定向到首頁(yè)
return redirect(reverse("mobile_index"))
else:
context={"info": '此賬號(hào)信息禁用'}
return render(request, "mobile/register.html", context)
def addOrders(request):
'''移動(dòng)端下單表單頁(yè)'''
# 嘗試從session中獲取名字為cartlist的購(gòu)物車信息,若沒(méi)有返回{}
cartlist=request.session.get('cartlist', {})
total_money=0 # 初始化一個(gè)總金額
# 遍歷購(gòu)物車中的菜品并累加總金額
for vo in cartlist.values():
total_money +=vo['num']*vo['price']
request.session['total_money']=total_money # 放進(jìn)session
return render(request,"mobile/addOrders.html")
def doAddOrders(request):
'''執(zhí)行移動(dòng)端下單操作'''
try:
#執(zhí)行訂單信息的添加
od=Orders()
od.shop_id=request.session['shopinfo']['id']
od.member_id=request.session['mobileuser']['id']
od.user_id=0
od.money=request.session['total_money']
od.status=1 #訂單狀態(tài):1進(jìn)行中/2無(wú)效/3已完成
od.payment_status=2 #支付狀態(tài):1未支付/2已支付/3已退款
od.create_at=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
od.update_at=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
od.save()
# 執(zhí)行支付信息添加
op=Payment()
op.order_id=od.id #訂單id號(hào)
op.member_id=request.session['mobileuser']['id']
op.type=2 #1會(huì)員付款/2收銀收款
op.bank=request.GET.get("bank", 3) # 收款銀行渠道:1微信/2余額/3現(xiàn)金/4支付寶
op.money=request.session['total_money']
op.status=2 # 支付狀態(tài):1未支付/2已支付/3已退款
op.create_at=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
op.update_at=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
op.save()
# 執(zhí)行訂單詳情的添加
cartlist=request.session.get("cartlist", {}) # 獲取購(gòu)物車中的菜品信息
# 遍歷購(gòu)物車中的菜品并添加到訂單詳情中
for item in cartlist.values():
ov=OrderDetail()
ov.order_id=od.id # 訂單id
ov.product_id=item['id'] # 菜品id
ov.product_name=item['name'] # 菜品名稱
ov.price=item['price'] # 單價(jià)
ov.quantity=item['num'] #數(shù)量
ov.status=1 # 狀態(tài):1正常/9刪除
ov.save()
del request.session['cartlist']
del request.session['total_money']
except Exception as err:
print(err)
return render(request,"mobile/orderinfo.html", {"order": od})
運(yùn)行工程,點(diǎn)擊提交訂單,如下圖
會(huì)員下單處理寫完了,總體來(lái)說(shuō)也是增刪改查,下一篇講訂單的展示
#頭條創(chuàng)作挑戰(zhàn)賽#
十一、感恩節(jié)、黑五步步逼近,這也意味著現(xiàn)在已經(jīng)全面踏入2019旺季沖刺!不管你是新手賣家,還是eBay大賣,想要更多流量、更多市場(chǎng),必須要了解這個(gè)操作!
今年早些時(shí)候,eBay與臺(tái)灣最大的拍賣網(wǎng)站之一露天拍賣攜手合作,將eBay.com上的刊登無(wú)縫整合到露天拍賣平臺(tái)(https://pub.ruten.com.tw/ebaynew/index.html),方便臺(tái)灣消費(fèi)者使用中文查詢搜索、下單購(gòu)買eBay.com上的產(chǎn)品。賣家刊登的物品,只要物流選擇遞送的目的地包含臺(tái)灣,就會(huì)有機(jī)會(huì)被整合到露天平臺(tái)上。這就為eBay賣家進(jìn)一步拓展臺(tái)灣市場(chǎng)帶來(lái)了極大的便利。
所以,不要再猶豫,不要再等待,現(xiàn)在就檢查你的刊登設(shè)置
如果你還未添加臺(tái)灣為送貨地點(diǎn)選項(xiàng):請(qǐng)盡早添加臺(tái)灣為其中一個(gè)送貨地選項(xiàng);
如果你已經(jīng)添加臺(tái)灣為送貨地選項(xiàng)的賣家:建議可重新評(píng)估及優(yōu)化運(yùn)送至臺(tái)灣的物流方式,以提升刊登的曝光機(jī)會(huì)。
如何操作
設(shè)置國(guó)際運(yùn)送方案,運(yùn)送到全世界, 選擇運(yùn)送方式并設(shè)置運(yùn)費(fèi)
賣家可以選擇屏蔽一些不便運(yùn)送的國(guó)家和地區(qū),如要運(yùn)送到臺(tái)灣,請(qǐng)勿屏蔽臺(tái)灣
賣家常見(jiàn)問(wèn)題分享
Q:eBay上哪些刊登會(huì)呈現(xiàn)在露天拍賣平臺(tái)?
A:只要您的刊登滿足以下2個(gè)條件:
1)商品所在地在美國(guó)、香港地區(qū)、或者中國(guó)大陸
2)送貨地點(diǎn)包括臺(tái)灣。
系統(tǒng)將自動(dòng)同步有關(guān)刊登到露天拍賣,增加臺(tái)灣買家的購(gòu)買機(jī)會(huì)。
Q:哪些eBay刊登信息將同步到露天拍賣刊登頁(yè)?
A:eBay商品頁(yè)上的所有商品信息,包括圖像、標(biāo)題、描述和運(yùn)送方式等信息都將同步至露天拍賣。
https://goods.ruten.com.tw/item/show?30193433560276
Q:露天拍賣的訂單將如何在eBay上呈現(xiàn)?
A:露天拍賣的訂單,包括詳細(xì)的買家收貨信息(注:買家地址將為英文)將同步到eBay上,在賣家后臺(tái)“My eBay”中顯示。如同其他來(lái)自臺(tái)灣地區(qū)的訂單一樣,賣家只需一如既往在“My eBay”中處理相關(guān)訂單即可。
Q:通過(guò)露天拍賣購(gòu)買eBay商品的買家政策是什么?
A:有關(guān)詳細(xì)的買家政策,請(qǐng)參閱https://pub.ruten.com.tw/global/article.html,并注意第七點(diǎn)特別提及買方承擔(dān)的進(jìn)口稅責(zé)任
Q:如何知道商品是否成功刊登到露天拍賣?
A:如刊登成功,商品會(huì)在露天拍賣的搜索結(jié)果中出現(xiàn),而且顯示帶有“海外代購(gòu)”的標(biāo)志。
eBay與露天的合作
露天市集,是全臺(tái)最大交易市集,2018年平臺(tái)成交金額(GMV)突破新臺(tái)幣3,305億,不但是「臺(tái)灣NO.1拍賣網(wǎng)站」,更是全臺(tái)唯一超過(guò)千億交易金額的電商平臺(tái),成交規(guī)模已經(jīng)超過(guò)臺(tái)灣大型百貨及實(shí)體店鋪。
露天同時(shí)擁有超過(guò)1,100萬(wàn)名會(huì)員,其中有超過(guò)200萬(wàn)具有賣家會(huì)員身份,透過(guò)累積多年的珍貴電商消費(fèi)數(shù)據(jù),2018年起,露天持續(xù)增加電商大數(shù)據(jù)分析功能和人工智能服務(wù)內(nèi)容,采取開(kāi)放架構(gòu),已發(fā)展成為全臺(tái)主要的AI電商平臺(tái)。
今年四月,eBay攜手露天拍賣整合跨境電商(https://pub.ruten.com.tw/ebaynew/index.html),通過(guò)露天拍賣平臺(tái)向臺(tái)灣開(kāi)放ebay.com上GC賣家的物品刊登。臺(tái)灣用戶可以于露天平臺(tái)以“全程中文化”的購(gòu)物頁(yè)面與簡(jiǎn)單易用的購(gòu)物流程直接使用中文搜尋、選購(gòu)以及下單購(gòu)買eBay平臺(tái)上的產(chǎn)品,同時(shí)使用當(dāng)?shù)亟鹆魍瓿筛犊睿唐分彼团_(tái)灣,極大提升了他們的海淘購(gòu)物體驗(yàn)!
(呈現(xiàn)在露天拍賣網(wǎng)上的eBay listing)
來(lái)看看露天拍賣上都在賣什么?
生活家居產(chǎn)品成為大熱,
男女時(shí)尚單品趨勢(shì)良好。
玩具、相機(jī)、電腦等娛樂(lè)消費(fèi)品類潛力巨大!
(露天拍賣2018年商品結(jié)構(gòu))
(在露天拍賣上成交量前5名的eBay listing品類)
這么大的市場(chǎng),這么簡(jiǎn)單的操作,
你還在猶豫什么?
動(dòng)動(dòng)手指操作起來(lái),Q4不沖待何時(shí)?
(來(lái)源:ebay)
以上內(nèi)容屬作者個(gè)人觀點(diǎn),不代表雨果網(wǎng)立場(chǎng)!如有侵權(quán),請(qǐng)聯(lián)系我們。
有任何eBay問(wèn)題,請(qǐng)關(guān)注微信號(hào)【ebaycifnews】
上雨果網(wǎng)搜索“跨境資料庫(kù)”,領(lǐng)取歐美/東南亞各國(guó)市場(chǎng)商機(jī)、各大平臺(tái)熱銷品報(bào)告、跨境電商營(yíng)銷白皮書!
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。