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

python编程快速上手(持续更新中…)

python实战项目(Django技术点)


分页文档

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_idstring商品分类ID,第三级分类
page_numstring当前页码
sortstring排序方式

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
                            })

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值