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