商品列表页
商品列表面分析:
从页面观察需要做的功能有:
1,页面中有商品分类,之前已做过,可封装调用
2. 面包屑 也称导航条
3. 热销排行- 由于是时时变化, 一般会存到redis中再进行查询
4. 排序(默认、价格、人气)
5. 根据分类查询展示具体的商品–如三级分类查询出手机
6. 分页
商品列表页组成结构分析
1.商品频道分类
• 已经提前封装在contents.utils.py文件中,直接调用即可。
2.面包屑导航
• 可以使用三级分类ID,查询出该类型商品的三级分类数据。
3.排序和分页
• 无论如何排序和分页,商品的分类不能变。
• 排序时需要知道当前排序方式。
• 分页时需要知道当前分页的页码,且每页五条商品记录。
4.热销排行
• 热销排行中的商品分类要和排序、分页的商品分类一致。
• 热销排行是查询出指定分类商品销量前二的商品。
• 热销排行使用Ajax实现局部刷新的效果。
商品列表页接口设计和定义
1.请求方式:
选项 方案
请求方法 GET
请求地址 /list/(?P<category_id>\d+)/(?P<page_num>\d+)/?sort=排序方式
# 按照商品创建时间排序
http://www.meiduo.site:8000/list/115/1/?sort=default
# 按照商品价格由低到高排序
http://www.meiduo.site:8000/list/115/1/?sort=price
# 按照商品销量由高到低排序
http://www.meiduo.site:8000/list/115/1/?sort=hot
# 用户随意传排序
http://www.meiduo.site:8000/list/115/1/?sort=ellen
2.请求参数:路径参数 和 查询参数
参数名 类型 是否必传 说明
category_id string 是 商品分类ID,第三级分类
page_num string 是 当前页码
sort string 否 排序方式
3.响应结果:HTML
list.html
4.接口定义
class GoodsListView(View):
"""商品列表页"""
def get(self, request, category_id, page_num):
"""提供商品列表页"""
return render(request, 'list.html')
将goods/view.py 中面包屑(导航条)封装到utils.py中调用
调用contens/utils.py 中get_categories()商品列表页到goods/view.py
# 查询商品分类
categories = get_categories()
# 查询面包屑
breadcrumb = get_breadcrumb(category)
goods/utils.py
# @Time:2021/3/24 14:52
# @Author:Ellen
# @File:utils.py
from .models import GoodsCategory
def get_breadcrumb(category):
# 查询面包屑
# category_id
# 要考虑传了二级或一级情况
# 一级:返回一级 breadcrumb {'cat1':'' }
# 二级:返回二级 breadcrumb {'cat1':'', 'cat2':'',}
# 三级:返回三级 breadcrumb {'cat1':'', 'cat2':'','cat3': ''}
breadcrumb = {
'cat1': '',
'cat2': '',
'cat3': '',
}
if category.parent == None:
# 一级
breadcrumb['cat1'] = category
elif GoodsCategory.objects.filter(parent_id=category.id).count() == 0:
#