目標
實現商品分類相關API開發,并通過showdoc
進行測試。
- api -
save_goods_category
保存商品分類,在新增或者編輯商品分類時使用。 - api -
search_goods_category
搜索商品分類。 - api -
detail_goods_category
獲取商品分享詳情。
1. 創建 商品分類 數據模型
在goods
應用的 model\goods.py
中。
1.1 商品分類 - GoodsCategory
from django.db import models
from django.utils.translation import gettext_lazy
class GoodsCategory(models.Model):
class Meta:
verbose_name_plural = '商品分類'
name = models.CharField(verbose_name='分類名', max_length=255)
super_category = models.ForeignKey('self', on_delete=models.CASCADE, blank=True, null=True, default=None,
verbose_name='父類', related_name='sub_category_set')
priority = models.IntegerField(verbose_name='排序優先級', default=0)
def __str__(self):
return self.name
1.2 執行 遷移腳本指令
python manage.py makemigrations goods
python manage.py migrate goods
2. 創建 商品分類 業務服務
在goods
應用的 service\goods.py
中。
class GoodsCategoryService(object):
goods_category = None
def __init__(self, goods_category):
self.goods_category = goods_category
def update_by_body(self, body):
pass
def get_json(self):
return {
'id': self.goods_category.id,
'name': self.goods_category.name
}
在goods
應用的 model\goods.py
中,注入服務
class GoodsCategory(models.Model):
# 省略前面已經提及的代碼部分
def get_service(self):
from ..service.goods import GoodsCategoryService
return GoodsCategoryService(self)
def json(self):
return self.get_service().get_json()
3. 創建 res_map
返回字典
def get_success(data={}, msg='請求成功', events=None):
return {
'code': '10001',
'data': data,
'msg': msg,
'events': events
}
4. 創建 API 接口
save_goods_category
保存商品分類,在新增或者編輯商品分類時使用。
import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from ..model import goods
from .. import res_map
# 保存 商品分類
@csrf_exempt
def save_goods_category(request):
body = json.loads(request.body)
if 'id' in body:
# 帶ID就是修改
goods_category = goods.GoodsCategory.objects.get(id=body['id'])
else:
# 不帶ID就是新增
goods_category = goods.GoodsCategory()
if 'name' in body:
goods_category.name = body['name']
if 'priority' in body:
goods_category.priority = body['priority']
if 'super_category_id' in body:
super_category = goods.GoodsCategory.objects.get(id=body['super_category_id'])
goods_category.super_category = super_category
goods_category.save()
return JsonResponse(res_map.get_success(goods_category.json()))
search_goods_category
搜索商品分類。
# 查詢 商品分類
@csrf_exempt
def search_goods_category(request):
body = json.loads(request.body)
goods_category_set = goods.GoodsCategory.objects.all()
if 'super_category_id' in body:
goods_category_set.filter(super_category__id=body['super_category_id'])
if 'search_text' in body:
goods_category_set.filter(name__icontains=body['search_text'])
res_list = []
for goods_category in goods_category_set:
res_list.append(goods_category.json())
return JsonResponse(res_map.get_success(res_list))
detail_goods_category
獲取商品分享詳情。
# 詳情 商品分類
@csrf_exempt
def detail_goods_category(request):
body = json.loads(request.body)
goods_category = goods.GoodsCategory.objects.get(id=body['id'])
return JsonResponse(res_map.get_success(goods_category.json()))
5. 接入URL
5.1 在goods
應用的urls.py
from django.urls import path
from .api import goods
urlpatterns = [
path('save_goods_category', goods.save_goods_category, name='save_goods_category'), # 保存 商品分類
path('search_goods_category', goods.search_goods_category, name='search_goods_category'), # 查詢 商品分類
path('detail_goods_category', goods.detail_goods_category, name='detail_goods_category'), # 詳情 商品分類
]
5.2 在項目的urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('goods/', include('goods.urls')),
]
6. 使用showdoc
測試
關于showdoc
的安裝和使用教程在這里: showdoc
6.1 save_goods_category
接口測試
save_goods_category接口測試.png
6.2 search_goods_category
接口測試
圖片.png
6.3 detail_goods_category
接口測試
圖片.png