Python全系列 教程
3567个小节阅读:5929.7k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
猜你喜欢商品就是列出最近浏览商品,首先要保留用户浏览的足迹,可以使用session也可以使用cookie。而且猜你喜欢中推荐的也是最近浏览的同类商品,比如现在浏览的女装,应该列出最近浏览记录中分类是女装的商品。再有浏览的商品较多时候,猜你喜欢中列出最近浏览的商品。
调用商品详情方法需要保存浏览记录。所以在goodsdetails函数添加装饰器,和recommend_list参数。
views.py
xxxxxxxxxx
#商品列表
def index(request,categoryid=2,page_num=1):
#1.获取所有分类
categoryList = Category.objects.all().order_by('id')
#2.根据分类id查询该分类下的所有商品
goodsList = Goods.objects.filter(category_id=categoryid)
#创建Paginator
paginator = Paginator(object_list=goodsList,per_page=settings.PER_PAGE_NUMBER)
#获取当前page_num页的数据
goods_page = paginator.get_page(page_num)
#设置传递的参数
context = {
'categoryList':categoryList,
'goods_page':goods_page,
'currentCid':categoryid,
'page_range': get_page_range_by_page_and_max_page(goods_page.number, paginator.num_pages)
}
return render(request,'goodsapp/index.html',context)
def recommond_test(func):
def inner(request,goodsid,*args, **kwargs):
#获取Cookie中获取c_goodsid
c_goodsid = request.COOKIES.get('c_goodsid')
#c_goodsid存放到cookie中是以空格拼接的字符串,转换为列表
goodsIdList = [id for id in c_goodsid.split() if id.strip()]
#查看当前访问的商品是否已经在goodsIdList中存在,如果存在则删除
if goodsid in goodsIdList:
goodsIdList.remove(goodsid)
#将商品id插入到列表的最前面,因为猜我喜欢获取记录列表中的前四个商品
goodsIdList.insert(0,goodsid)
#根据goodsId获取前四个商品,但不可以是当前查看的商品,而且分类要一致
goodsObjectsList = [Goods.objects.get(id=gid) for gid in goodsIdList if gid!=goodsid and Goods.objects.get(id=gid).category_id == Goods.objects.get(id=goodsid).category_id]
#调用视图方法
response = func(request,goodsid,recommond_list=goodsObjectsList,*args,**kwargs)
#将用户访问过的商品ID列表存放到cookie中
response.set_cookie('c_goodsid',' '.join(goodsIdList),max_age=3*24*60*60)
return response
def recommond(func):
def inner(request,goodsid,*args, **kwargs):
#获取Cookie中获取c_goodsid
c_goodsid = request.COOKIES.get('c_goodsid','')
#c_goodsid存放到cookie中是以空格拼接的字符串,转换为列表
goodsIdList = [id for id in c_goodsid.split() if id.strip()]
#查看当前访问的商品是否已经在goodsIdList中存在,如果存在则删除
if str(goodsid) in goodsIdList:
goodsIdList.remove(str(goodsid))
#将商品id插入到列表的最前面,因为猜我喜欢获取记录列表中的前四个商品
goodsIdList.insert(0,goodsid)
#根据goodsId获取前四个商品,但不可以是当前查看的商品,而且分类要一致
goodsObjectsList = [Goods.objects.get(id=gid) for gid in goodsIdList if gid!=goodsid and Goods.objects.get(id=gid).category_id == Goods.objects.get(id=goodsid).category_id][:4]
#调用视图方法
response = func(request,goodsid,recommond_list=goodsObjectsList,*args,**kwargs)
#将用户访问过的商品ID列表存放到cookie中
response.set_cookie('c_goodsid',' '.join([str(id) for id in goodsIdList]),max_age=3*24*60*60)
return response
return inner
#根据商品的id查询商品详情
@recommond
def goodsdetails(request,goodsid,recommond_list=[]):
try:
#根据goodsid查询商品
goods = Goods.objects.get(id=goodsid)
return render(request,'goodsapp/goodsdetail.html',{'goods':goods,'recommond_list':recommond_list})
except Goods.DoesNotExist:
return HttpResponse(status=404)
goodsdetail.html
xxxxxxxxxx
<div class="goods-model" style="margin-right: -18px;text-align: center">
<img src="{% static 'recommend.png'%}" style="position: relative;left: -10px;top: 10px">
<div class="goods-content">
{% for recommend in recommond_list %}
<div class="good">
<a href="goodsdetails/{{recommend.id}}">
<img src="{{recommend.getImgUrl}}" width="285px" height="285px">
<p class="name">{{recommend.gname}}</p>
<div class="price">
<i>¥</i>
<p class="big">{{recommend.price}}</p>
<s>¥{{recommend.oldprice}}</s>
</div>
<div class="sale">
特卖
</div>
</a>
</div>
{% endfor %}
</div>
</div>