హలో,我是Charlie!
在Day12当中,我们完成了商品详情显示的API,而今天我们将完成後端的购物车总商品显示跟加入购物车的API。
================================◉‿◉=================================
首先在keyboardmarket\urls.py中新增usercart的urlpattern:
url('usercart',include('usercart.urls'))
接着在usercart中新增urls.py,并且新增urlpattern:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$',views.usercart)
]
接着在views.py当中新增usercart def,因为购物车的各种操作都需要token,所以使用logincheck来装饰视图函数:
from tools.R import R
from tools.login_check import logincheck
from .models import Cart
@logincheck('GET','POST','PUT','DELETE')
def usercart(request):
return R.ok("API reachable")
首先是新增购物车的方法,新增购物车的话会需要几个东西:
所以接收到的JSON必须包含这三个,才能从user跟product当中捞取正确的用户跟商品,amount则是加入购物车的数量。
所以首先我们先创立用来处理购物车请求的model:
import json
class CartModel:
def __init__(self,product_id = 0,username = "",amount = 0):
self.product_id = product_id
self.username = username
self.amount = amount
def fromJson(self,data):
jsondata = json.loads(data)
self.product_id = jsondata["pid"]
self.username = jsondata["username"]
self.amount = jsondata["amount"]
接着在views.py当中分别引入Cart model、Product model、User model、CartStatus Enum:
from .models import Cart
from tools.models.cartModel import CartModel
from product.models import Product
from users.models import User
from tools.db import CartStatus
然後判断request method为POST,判断如果商品存在、数量合理则可加入购物车,如果商品存在的话就加上数量,如果商品不存在的话则创建:
if request.method == "POST":
req = request.body
ucart = CartModel()
ucart.fromJson(req)
if ucart.amount == 0:
return R.badRequest("Add cart amount can not be 0")
product = Product.objects.filter(id = ucart.product_id)
if not product:
return R.badRequest("Product does not exist")
product = product[0]
if ucart.amount > product.stored_amount:
return R.badRequest("Add cart amount reach maximum stored amount")
user = User.objects.filter(name = ucart.username)
if not user:
return R.badRequest("User does not exist")
user = user[0]
dbcart = Cart.objects.filter(user = user).filter(product = product)
if dbcart:
dbcart[0].amount += ucart.amount
dbcart[0].save()
else:
cart = Cart.objects.create(
product = product,
user = user,
amount = ucart.amount,
status = CartStatus.activate.value
)
cart.save()
用POSTMAN测试:
还有购物车的总商品显示,先在Cart model当中新增toJson方法:
def toJson(self):
data = {}
data["id"] = self.id
data["product"] = self.product.toJson()
data["username"] = self.user.name
data["amount"] = self.amount
data["status"] = self.status
data["created_time"] = self.created_time
data["modified_time"] = self.modified_time
return data
在urls.py中新增路径:
url(r'/(?P<username>[\w]{1,55})$',views.usercart),
并且在usercart中新增参数跟方法:
@logincheck('GET','POST','PUT','DELETE')
def usercart(request,username = None):
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)
return R.ok(carts)
测试:
================================◉‿◉=================================
Day13结束了!在今天我们完成了购物车的商品显示跟加入购物车,明天我们将完成前端的部分,See ya next day!
Hi Dai Gei Ho~ 我是Winnie~ 在今天的内容中,此篇文章将要来说 Composit...
线性代数 LR:逻辑回归(Logistic Regression): 预测事件发生的机率(y=1)...
今天面临了断更的危机! 本人从昨晚开始肠胃不适,整晚翻来覆去无法入眠,早上更严重,请假了一整天,接着...
你喜欢什麽类型? | 实质的那一种 | $$$$$$爱了 🐄点此填写今日份随堂测验 ...
Accounting service is considered a part of the ove...