Здравейте,我是Charlie!
在Day16当中,我们完成了前端的购物车新增跟删除,而今天我们将完成结帐跟订单新增的API。
================================◉‿◉=================================
首先是结帐的部分,由於我们结帐的时候是结帐整个购物车,所以直接收到username就可以了。
先在userorder里面新增urls.py,并且新增url patterns:
# userorder\urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$',views.userorder)
]
# keyboardmarket\urls.py
url('userorder',include('userorder.urls'))
并且在userorder当中建立userorder view:
from tools.R import R
from tools.login_check import logincheck
@logincheck('POST')
def userorder(request):
if request.method == "POST":
pass
else:
return R.methodNotAllowed('method not allowed')
结帐的话用的是POST请求,会收到的是username的部分,所以这边在接收到username时直接抓取user相关的cart,并进行结帐的动作:
req = request.body
udata = json.loads(req)
if "username" not in udata:
return R.badRequest("username not found")
username = udata["username"]
user = User.objects.filter(name = username)
if not user:
return R.badRequest("user does not exist")
user = user[0]
usercart = Cart.objects.filter(user = user)
if not usercart:
return R.badRequest("cart is empty")
如果usercart的资料都没问题的话,下一步是产生我们的订单编号,这里的订单编号采用日期 + UUID4前一位的部分,所以先产生订单编号,再对Cart跟order的model进行操作:
from .models import Order
import json
import uuid
from tools.db import CartStatus,OrderStatus
now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
uuid4String = str(uuid.uuid4()).split("-")[0]
orderno = now + uuid4String
for cart in usercart:
cart.status = CartStatus.deactivate.value
cart.save()
userorder = Order.objects.create(
orderno = orderno,
product = cart.product,
user = cart.user,
amount = cart.amount,
status = OrderStatus.notPaid.value
)
return R.ok("checkout success")
写完之後,我们可以用postman进行测试:
接着我们到usercart的地方,设定如果是status 1才回传资料:
if request.method == "GET":
user = User.objects.filter(name = username)
if not user:
return R.badRequest("User does not exist")
user = user[0]
carts = Cart.objects.filter(user = user).filter(status = CartStatus.activate.value)
carts = [i.toJson() for i in carts]
return R.ok(carts)
接着做测试:
就可以看到已结帐的购物车不会再出现了。
到此为止结帐的部分功能已经简易做出来了,而之後我们付款的部分将会串金流 – paypal,让这个购物网站更加完整。
================================◉‿◉=================================
Day17结束了!今天我们完成了结帐的新增订单API,而明天我们将完成前端的结帐新增订单,See ya next day!
>>: 第16车厢-提示我一下嘛!bootstrap-tooltip应用篇
前言 昨天我们介绍了高品质工作四部法,今天让我们来介绍头脑风暴。 头脑风暴,是一种为激发创造力、强化...
疫苗在台湾第一次吵得沸沸扬扬时,我也被各种有孔没笋的消息搞得莫名其妙,为了跟人争辩时不要说错话,闲人...
一、前言 这篇要介绍的是当你的网站要申请无障碍标章时,必须要做的「无障碍检测」。一个好的网站,是...
拉出 component Component 除了在同一个 module 用之外也能拉出来放 我们来...
前言 承接昨天的内容,今天来加上viewDidLoad中的逻辑内容{ @•̀ꈊ•́@ } 学习资源 ...