Kia ora,我是Charlie!
在Day09当中我们完成了用户服务的修改资料,而今天我们要完成商品模块的总商品资料API。
================================◉‿◉=================================
首先是url路径的部分,一样在ur当中包含product的url:
# products\urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$',views.product)
]
# keyboardmarket\urls.py
url('product',include('product.urls'))
# product\views.py
def product(request):
return R.ok("call success")
建立完後,我们先建立返回全部商品的API,这里我们使用GET,首先先在Product model当中建立toJson方法:
class Product(models.Model):
id = models.AutoField(primary_key = True)
name = models.CharField(max_length = 255,verbose_name = "商品名称")
price = models.IntegerField(verbose_name = "价格")
stored_amount = models.IntegerField(verbose_name = "存量")
created_time = models.DateTimeField(auto_now = True)
modified_time = models.DateTimeField(auto_now = True)
status = models.IntegerField(verbose_name = "状态")
img = models.ImageField(upload_to = "productImage/")
category = models.IntegerField(verbose_name = "种类")
info = models.TextField(verbose_name = "详细描述")
def toJson(self):
data = {}
data["name"] = self.name
data["price"] = self.price
data["stored_amount"] = self.stored_amount
data["created_time"] = self.created_time
data["modified_time"] = self.modified_time
data["status"] = self.status
data["img"] = self.img.url
data["category"] = self.category
data["info"] = self.info
return data
class Meta:
db_table = "products"
接着建立视图,筛选出状态为1(activate)的商品:
from tools.R import R
from .models import Product
from tools.db import ProductStatus
# Create your views here.
def product(request):
if request.method == "GET":
products = Product.objects.filter(status = ProductStatus.activate.value)
products = [i.toJson() for i in products]
return R.ok(products)
测试成功的话,就可以看到所有的商品:
接着我们还需要另外一个API接口:返回各种种类的商品API。
首先在urlpatterns里面建立url:
url(r'/(?P<categoryID>[\w]{1,55})$',views.product),
然後在tools\db.py中的ProductCategory中,建立static method list:
@staticmethod
def list():
return list(map(lambda c: c.value, ProductCategory))
接着在views当中建立API,过滤出符合categoryID的商品:
from tools.db import ProductStatus,ProductCategory
if request.method == "GET" and categoryID is not None:
if int(categoryID) not in ProductCategory.list():
return R.badRequest("category ID does not exist")
products = Product.objects.filter(status = ProductStatus.activate.value).filter(category = categoryID)
products = [i.toJson() for i in products]
return R.ok(products)
这里要注意的是,传入的categoryID为String,如果直接判断是否在ProductCategory.list当中
的话会出错,必须要加上int()转型才行,可以将两者印出看看type:
print(type(categoryID))
print(type(ProductCategory.list()[0]))
而这里还衍生了另外一个问题,如果categoryID是文字的话,转为int就会出错,所以这里要再加上防堵的程序码:
if not categoryID.isdigit():
return R.badRequest("categoryID is number only!")
最後是返回种类的API,由於我们一开始并没有建立cateogry表及外连,在最小的更动下可以使用Enum中的value来返回,首先先建立urlpattern:
url(r'/category$',views.product),
接着在Enum当中建立dict方法:
@staticmethod
def dict():
return {
"键盘":ProductCategory.keyboard.value,
"耳机":ProductCategory.earphone.value,
"滑鼠":ProductCategory.mouse.value,
"桌机":ProductCategory.desktop.value
}
接着在views当中建立API:
if 'category' in request.path:
return R.ok(ProductCategory.dict())
就可收到种类。
================================◉‿◉=================================
Day10结束了!在今天我们先完成了商品的返回资料API,明天我们将完成商品资料的前端显示,之後也会再更动cateogry的部分,让category能够从资料库捞取,See ya next day!
<<: Day24. form_tag 与 simple_form_for 的用法 - 表单 part2
今天要分享的故事是关於我在今年初开始经营粉丝专页的收获! 进入正题 虽然现在的年轻人更偏好使用 In...
ArchiMate 是The Open Group面向企业架构的开放且独立的建模语言,由不同的工具供...
鬼门关前走一遭生死一瞬间的一周 事情是这样的,由於一个月前的我刚进入战斗营,对物件导向的概念还是非常...
「不用怕绕远路,会到终点就好」 高中的音乐课老师给班上所有学生每个人一张便利贴 每张上面都有一句勉...
昨天我们说到 Service Container 是一个地方绑定你类别如何产生出来,或者是你想将 i...