Django商品列表页接口设计和定义(python分页)


1.请求方式

选项 方案 请求方法 GET 请求地址 /list/(?P<category_id>d+)/skus/

# 排序依据: 
# 按照商品创建时间排序
http://www.meiduo.site:8000/list/115/skus/?page=1&page_size=5&ordering=-create_time

# 按照商品价格由低到高排序
http://www.meiduo.site:8000/list/115/skus/?page=1&page_size=5&ordering=price

# 按照商品销量由高到低排序
http://www.meiduo.site:8000/list/115/skus/?page=1&page_size=5&ordering=-sales

2.请求参数:路径参数 和 查询参数

参数名 类型 是否必传 说明 category_id string 是 商品分类ID,第三级分类 page_num string 是 当前页码 sort string 否 排序方式

3.编码

from django.core.paginator import Paginator, EmptyPagefrom django.views import Viewfrom apps.goods.models import SKU, GoodsCategoryfrom django.http import JsonResponsefrom utils.goods import get_breadcrumb
class ListView(View):
    """商品列表页"""

    def get(self, request, category_id):
        """提供商品列表页"""
        # 获取参数:
        page = request.GET.get(page)
        page_size = request.GET.get(page_size)
        ordering = request.GET.get(ordering)

        # 判断category_id是否正确
        try:
            # 获取三级菜单分类信息:
            category = GoodsCategory.objects.get(id=category_id)
        except Exception as e:
            return JsonResponse({
          
   code:400,
                                 errmsg:获取mysql数据出错})

        # 查询面包屑导航(函数在下面写着)
        breadcrumb = get_breadcrumb(category)

        # 排序方式:
        try:
            skus = SKU.objects.filter(category=category,
                                      is_launched=True).order_by(ordering)
        except Exception as e:
            return JsonResponse({
          
   code:400,
                                 errmsg:获取mysql数据出错})

        paginator = Paginator(skus, page_size)
        # 获取每页商品数据
        try:
            page_skus = paginator.page(page)
        except EmptyPage:
            # 如果page_num不正确,默认给用户400
            return JsonResponse({
          
   code:400,
                                 errmsg:page数据出错})
        # 获取列表页总页数
        total_page = paginator.num_pages

        # 定义列表:
        list = []
        # 整理格式:
        for sku in page_skus:
            list.append({
          
   
                id:sku.id,
                default_image_url:sku.default_image.url,
                name:sku.name,
                price:sku.price
            })

        # 把数据变为 json 发送给前端
        return JsonResponse({
          
   
                             code:0,
                             errmsg:ok,
                             breadcrumb: breadcrumb,
                             list:list,
                             count:total_page
                            })
经验分享 程序员 微信小程序 职场和发展