目标
实现商品分类相关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
接口测试
6.2 search_goods_category
接口测试
6.3 detail_goods_category
接口测试