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.请求参数:路径参数 和 查询参数
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
})
