def index(request): # 主页 # 拿出所有的分类 category_list = CategoryModel.objects.all() # 分别取出分类下的最新的商品 new_goods_dict = {} #存储每个分类下的最新的商品 for category in category_list: # 直接通过商品分类id从goods中获取当前分类的商品 goods_info_list = GoodsModel.objects.filter(category_id=category.id).order_by('id')[:4] # goods_list = CategoryGoodsModel.objects.filter(category_id=category.id).order_by('-goods_id')[:4] #拿到查询出的所有的goods的id # goods_ids = [goods.goods_id for goods in goods_list] # goods_info_list = GoodsModel.objects.filter(id__in=goods_ids) new_goods_dict[category]=goods_info_list # 从session中拿到user的id # user_id = request.session.get('user_id',0) # cart_list = CartModel.objects.filter(user_id=user_id) # cart_count = 0 # 统计出购物车中所有的商品数量 # for cart in cart_list: # cart_count += cart.count cart_count = cart_count_goods(request,CartModel) context = { 'new_goods_dict':new_goods_dict, 'cart_count':cart_count } return render(request,'goods/index.html',context)
def list(request,category_id,sort,page_num): """商品列表视图""" """category_id: 分类的id page_num: 获取当前页的页码 sort: 排序字段(默认: default,价格: price,人气: popular)""" category = CategoryModel.objects.get(id=category_id) # 取该类型最新的两个商品 news = GoodsModel.objects.filter(category_id=category_id).order_by('-id')[:2] # 外键的用法 # news = category.goodsmodel_set.order_by('-id')[:2] goods_list = [] if sort == 'default': # 默认排序, 最新的在上面 goods_list = GoodsModel.objects.filter(category_id=category_id).order_by('-id') elif sort == 'price': # 价格排序 goods_list = GoodsModel.objects.filter(category_id=category_id).order_by('-price') elif sort == 'popular': # 按人气排序 goods_list = GoodsModel.objects.filter(category_id=category_id).order_by('-popular') # 根据商品的列表goods_list 进行分页 paginator = Paginator(goods_list,2) page = paginator.page(page_num) cart_count = cart_count_goods(request,CartModel) context = { 'category':category, # 商品的分类对象 'news':news, # 新品推荐 'goods_list':goods_list, # 排序后的商品列表 'sort':sort, # 排序的条件 'cart_count':cart_count, # 购物车中的商品数量 'page':page, 'page_num':page_num #当前的页数 } return render(request,'goods/list.html',context)
def extra_context(self): news = GoodsModel.objects.all().order_by('-id')[:2] goods_name = self.request.GET.get('q') page_num = self.request.GET.get('page') # search_goods = GoodsModel.objects.filter(goods_name__iregex=".*?".join(list(goods_name))) sort = self.request.GET.get('sort', "default") if sort in ['price', 'popular']: list_goods = self.results.order_by('-' + sort) else: sort = 'default' list_goods = self.results.order_by('-' + 'id') paginator = Paginator(list_goods, 2) try: page = paginator.page(page_num) except EmptyPage: page = paginator.page(paginator.num_pages) except PageNotAnInteger: page = paginator.page(1) context = { 'cart_count': cart_count_goods(self.request, CartModel), 'goods_name': goods_name, 'my_page': page, 'my_paginator': paginator, 'sort': sort, 'page_num': page_num, 'news': news } return context
def detail(request, goods_id): """某个商品的详细信息,goods id是具体的某个商品""" goods = GoodsModel.objects.get(id=goods_id) goods.popular = goods.popular + 1 goods.save() news = goods.category.goodsmodel_set.order_by("-id")[:2] # 记录最近的浏览记录,在用户中心使用 # 判断是否已经登录 if request.session.has_key("user_id"): user_id = request.session.get("user_id") goods_id_list = request.session.get(str(user_id), []) if not goods_id_list: # 判断是否有浏览记录 goods_id_list.append(goods.id) else: # 如果已经存在过浏览的商品大于5个时 删除一个 if goods_id in goods_id_list: goods_id_list.remove(goods_id) # 添加元素到列表的第一个 goods_id_list.insert(0, goods_id) # 判断是否超过五个记录,超过删除最后一个 if len(goods_id_list) > 5: del goods_id_list[-1] request.session[user_id] = goods_id_list cart_count = cart_count_goods(request, CartModel) categorys = CategoryModel.objects.all() return render(request, "df_goods/detail.html", {"goods": goods, "news": news, "cart_count": cart_count, 'categorys': categorys})
def index(request): """主页""" # 拿出所有的分类 category_list = CategoryModel.objects.all() # 分别取出分类下的最新商品 new_goods_dict = {} #存储每个分类下的最新的商品 for category in category_list: # 修改了商品model之后的逻辑 # 直接通过商品分类id从goods中获取当前分类的商品 goods_list = GoodsModel.objects.filter( category_id=category.id).order_by('id')[:4] # goods_list=CategoryGoodsModel.objects.filter(category_id=category.id).order_by('-goods_id')[:4] # 拿到查询出的所有的goods的id # goods_ids=[goods.goods_id for goods in goods_list] # goods_info_list= GoodsModel.objects.filter(id__in=goods_ids) new_goods_dict[category] = goods_list # 从session中拿到user的id cart_count = cart_count_goods(request, CartModel) context = { 'new_goods_dict': new_goods_dict, 'cart_count': cart_count, } return render(request, 'goods/index.html', context)
def detail(request, goods_id): """某个商品的详细信息 goods_id是具体的某个商品""" goods = GoodsModel.objects.get(id=goods_id) goods.popular = goods.popular + 1 # 增加商品的人气值 goods.save() # news = GoodsModel.objects.filter(category_id=goods.category_id).order_by("-id")[:2] # 利用orm外键的特性 news = goods.category.goodsmodel_set.order_by("-id")[:2] # 购物车内商品的数量 cart_count = cart_count_goods(request, CartModel) # 记录最近的浏览记录,在用户中心使用 # 判断是否已经登陆 if request.session.has_key("user_id"): user_id = str(request.session.get("user_id")) goods_id_list = request.session.get(user_id, []) if not goods_id_list: # 判断是否有浏览记录 goods_id_list.append(goods.id) else: # 如果已经存在过浏览的商品,删除掉这一个 if goods_id in goods_id_list: goods_id_list.remove(goods_id) goods_id_list.insert(0, goods_id) # 添加元素到列表的第一个 if len(goods_id_list) > 5: # 如果超过5个浏览记录删除最后一个 del goods_id_list[-1] # 把最近浏览的商品存储在session中 以user_id的值为key request.session[user_id] = goods_id_list return render(request, "goods/detail.html", { "goods": goods, "news": news, "cart_count": cart_count })
def detail(request,goods_id): """商品详细信息""" goods = GoodsModel.objects.get(id=goods_id) goods.popular = goods.popular + 1 # 增加商品的人气值 goods.save() # 利用orm外键的特性 news = goods.category.goodsmodel_set.order_by('-id')[:2] cart_count = cart_count_goods(request) # 记录用户最近的浏览记录 # 判断是否有用户登录 if request.session.has_key('user_id'): user_id = str(request.session.get('user_id')) goods_id_list = request.session.get(user_id,[]) if not goods_id_list: goods_id_list.append(goods.id) else: # 判断之前是否存在该商品的记录 if goods_id in goods_id_list: goods_id_list.remove(goods_id) goods_id_list.insert(0,goods_id) if len(goods_id_list) > 6: # 如果超过5个浏览记录 删除最后一个 del goods_id_list[-1] # 把最近的浏览记录存储到session中 以user_id为key request.session[user_id] = goods_id_list return render(request,'goods/detail.html',{'goods':goods,'news':news,'cart_count':cart_count})
def detail(request, goods_id): # 某个商品的详细信息 goods_id 是具体的某个商品 goods = GoodsModel.objects.get(id=goods_id) goods.popular = goods.popular + 1 #增加商品的人气值 goods.save() # 利用orm外键的特性 news = goods.category.goodsmodel_set.order_by('-id')[:2] # 购物车中商品数量 cart_count = cart_count_goods(request, CartModel) # 记录最近的浏览记录,在用户中心使用 # 判断是否已经登陆 if request.session.has_key('user_id'): user_id = request.session.get('user_id') goods_id_list = request.session.get(str(user_id), []) if not goods_id_list: #判断是否有浏览记录 goods_id_list.append(goods.id) else: # 如果已经存在过浏览的商品 删除掉这一个 if goods_id in goods_id_list: goods_id_list.remove(goods_id) goods_id_list.insert(0, goods_id) # 添加元素到列表的第一个 if len(goods_id_list) > 5: del goods_id_list[-1] #如果超过五个浏览记录 删除最后一个 # 把最近浏览的商品存储在session中 以user_id的值为key request.session[user_id] = goods_id_list return render(request, 'goods/detail.html', { "goods": goods, 'news': news, 'cart_count': cart_count })
def index(request): """首页""" # 拿出所有的分类 category_list = CategoryModel.objects.all() # 分别取出分类下的最新商品 new_goods_dict = {} # 用来存储每个分类下的最新商品 for category in category_list: goods_info_list = GoodsModel.objects.filter(category_id=category.id).order_by("-id")[:4] # apple_list = GoodsModel.objects.filter(category_id=category.id, ) new_goods_dict[category] = goods_info_list cart_count = cart_count_goods(request, CartModel) if not cart_count: cart_count = 0 return render(request, "index.html", {"new_goods_dict": new_goods_dict, "category_list": category_list, "cart_count": cart_count})
def index(request): """主页""" # 拿出所有的分类 category_list = CategoryModel.objects.all() # 分别取出分类下的最新的商品 new_goods_dict = {} for category in category_list: # goods_list = CategoryGoodsModel.objects.filter(category_id=category.id).order_by("-goods_id")[:4] goods_list = GoodsModel.objects.filter( category_id=category.id).order_by("-id")[:4] new_goods_dict[category] = goods_list context = { "new_goods_dict": new_goods_dict, "cart_count": cart_count_goods(request, CartModel) } return render(request, 'goods/index.html', context)
def extra_context(self): """重写附加内容的函数""" # 获取所有的商品类别 category_list = CategoryModel.objects.all() news = [] # 存储每个分类下2个最新商品 for category in category_list: goods_list = GoodsModel.objects.filter(category_id=category.id).order_by('-id')[:2] news.extend(goods_list) # 统计购物车中商品的数量 cart_count = cart_count_goods(self.request, CartModel) context = { 'news': [random.choice(news),random.choice(news)], 'cart_count': cart_count, 'sort':self.request.GET.get('sort','id') } return context
def add(request,goods_id,count): user_id =request.session['user_id'] # 查询购物车中是否已经有 carts =CartModel.objects.filter(user_id=user_id,goods_id=goods_id) if len(carts)>=1: cart = carts[0] cart.count = cart.count + count else: cart=CartModel() cart.user_id=user_id cart.goods_id=goods_id cart.count=count cart.save() # 如果是Ajax请求则返回一段json否则转向购物车 if request.is_ajax(): cart_count=cart_count_goods(request,CartModel) return JsonResponse({'cart_count':cart_count}) return redirect('/cart/')
def detail(request, goods_id): """某个商品的详细信息 goods_id""" goods = GoodsModel.objects.get(id=goods_id) goods.popular += 1 goods.save() news = goods.category.goodsmodel_set.order_by("-id")[:2] # 查看商品的评论 comments = CommentModel.objects.filter(goods_id=goods_id).order_by('-id') context = { "goods": goods, "news": news, 'cart_count': cart_count_goods(request, CartModel), 'comments': comments } # 记录最近的浏览记录, 在用户中心使用 # 判断是否已经登录 if request.session.has_key('user_id'): user_id = request.session.get('user_id') # 判断登录用户是否购买过该商品 buy_goods = OrderGoodsModel.objects.filter(goods_id=goods_id) if buy_goods: for goods in buy_goods: order_id = goods.order_id order = OrderModel.objects.get(id=order_id) if order.user_id == user_id: is_buy = True break else: is_buy = False else: is_buy = False context.update({"is_buy": is_buy}) goods_id_list = (request.session.get(str(user_id), [])) if len(goods_id_list) >= 5: goods_id_list.pop() if goods_id in goods_id_list: goods_id_list.remove(goods_id) goods_id_list.insert(0, goods_id) request.session[str(user_id)] = goods_id_list return render(request, "goods/detail.html", context)
def good_list(request, category_id, sort, page_num): """商品列表视图 category_id : 分类id sort :排序字段(默认:default, 价格:price,人气:popular) """ category = CategoryModel.objects.get(id=category_id) # 取该类型最新的两个商品 news = GoodsModel.objects.filter( category_id=category_id).order_by('-id')[:2] # 外键的用法 # news = category.goodsmodel_set.order_by("-id")[:2] # if sort == 'default': # goods = GoodsModel.objects.filter(category_id=category_id).order_by('-id') # elif sort == 'price': # goods = GoodsModel.objects.filter(category_id=category_id).order_by('-price') # else: # goods = GoodsModel.objects.filter(category_id=category_id).order_by('-popular') if sort in ['price', 'popular']: list_goods = GoodsModel.objects.filter( category_id=category_id).order_by('-' + sort) else: sort = 'default' list_goods = GoodsModel.objects.filter( category_id=category_id).order_by('-' + 'id') paginator = Paginator(list_goods, 1) try: page = paginator.page(page_num) except EmptyPage: page = paginator.page(paginator.num_pages) except PageNotAnInteger: page = paginator.page(1) context = { "category": category, "news": news, "list_goods": list_goods, "sort": sort, 'cart_count': cart_count_goods(request, CartModel), "page_num": page_num, "page": page, } return render(request, 'goods/list.html', context)
def index(request): """主页""" # 拿出所有的分类 category_list = CategoryModel.objects.all() # 分别取出分类下的最新的商品 new_goods_dict = {} # 存储每个分类下的最新的商品 for category in category_list: goods_list = CategoryGoodsModel.objects.filter( category_id=category.id).order_by("-goods_id")[:4] # 拿到查询出的所有的goods的id goods_ids = [goods.goods_id for goods in goods_list] print(goods_ids) goods_info_list = GoodsModel.objects.filter(id__in=goods_ids) print(goods_info_list) new_goods_dict[category] = goods_info_list cart_count = cart_count_goods(request, CartModel) context = {"new_goods_dict": new_goods_dict, "cart_count": cart_count} print(context) return render(request, "goods/index.html", context)
def add(request,goods_id,count): """添加到购物车视图,接收两个参数,商品id: goods_id,商品数量: count""" user_id = request.session['user_id'] # 查询购物车中是否有这个商品在这个人的名下,如果有数量增加,否则在购物车中新建一个商品 carts = CartModel.objects.filter(user_id=user_id,goods_id=goods_id) if len(carts)>=1: cart = carts[0] cart.count = cart.count + count else: cart = CartModel() cart.user_id = user_id cart.goods_id = goods_id cart.count = count cart.save() # 如果是ajax请求, 则返回一个json,否则转向购物车 if request.is_ajax(): cart_count = cart_count_goods(request,CartModel) return JsonResponse({'cart_count':cart_count}) return redirect('/cart/')
def add(request, goods_id, count): user_id = request.session.get("user_id") # 查询购物车中是否已经有这个商品在这个人的名下,如果有,那么增加商品的数量,如果没有,新建一个 carts = CartModel.objects.filter(user_id=user_id, goods_id=goods_id) if len(carts) >= 1: cart = carts[0] cart.count = cart.count + count else: cart = CartModel() cart.user_id = user_id cart.count = count cart.goods_id = goods_id cart.save() # 如果是ajax请求则返回一个json,否则跳转到购物车 if request.is_ajax(): cart_count = cart_count_goods(request, CartModel) return JsonResponse({"cart_count": cart_count}) return redirect(reverse("cart:cart"))
def add(request, goods_id, count): """添加到购物车视图, 接收两个参数,商品id:goods_id, 商品数量:count""" user_id = request.session['user_id'] # 查询购物车中是否已经有这个商品在这个人的名下,如果有数量增加,否则在购物车中新建一个商品 carts = CartModel.objects.filter(user_id=user_id, goods_id=goods_id) if len(carts) >= 1: cart = carts[0] cart.count = cart.count + count else: cart = CartModel() cart.user_id = user_id cart.goods_id = goods_id cart.count = count cart.save() # 如果是ajax请求则返回一个json, 否则转向购物车 if request.is_ajax(): cart_count = cart_count_goods(request, CartModel) return JsonResponse({"cart_count": cart_count}) return redirect("/cart/")
def list(request, category_id, sort, page_num): """商品列表视图""" """category_id: 分类的id page_num: 获取当前页的页码 sort: 排序字段(默认:default, 价格:price, 人气: popular)""" category = CategoryModel.objects.get(id=category_id) # 取该类型最新的两个商品 news = GoodsModel.objects.filter( category_id=category_id).order_by("-id")[:2] # 外键的用法 # news = category.goodsmodel_set.order_by("-id")[:2]\ goods_list = [] if sort == "default": # 默认排序,最新在上面 goods_list = GoodsModel.objects.filter( category_id=category_id).order_by("-id") elif sort == "price": # 按价格排序 goods_list = GoodsModel.objects.filter( category_id=category_id).order_by("-price") elif sort == "popular": # 按人气排序 goods_list = GoodsModel.objects.filter( category_id=category_id).order_by("-popular") # 根据商品的列表goods_list 进行分页 paginator = Paginator(goods_list, 2) page = paginator.page(page_num) cart_count = cart_count_goods(request, CartModel) context = { "category": category, # 商品的分类对象 "news": news, # 新品推荐 "goods_list": goods_list, # 排序后的商品列表 "sort": sort, # 排序的条件 "cart_count": cart_count, # 购物车中的商品数量 "page": page, "page_num": page_num, # 当前的页数 } return render(request, "goods/list.html", context)
def list(request, category_id, sort, page_num): """商品列表试图""" """category_id:分类的id page_num:获取当前页的页码 sort:排序的字段(默认的字段:default,价格:price,人气:popular) """ category = CategoryModel.objects.get(id=category_id) # 区该类型的最新的商品 news = GoodsModel.objects.filter( category_id=category_id).order_by('-id')[:2] goods_list = [] if sort == 'default': #默认排序 最新在上面 # if order_by == 0: # goods_list=GoodsModel.objects.filter(category_id=category_id).order_by(('id')) # else: goods_list = GoodsModel.objects.filter( category_id=category_id).order_by(('-id')) elif sort == 'price': #按价格排序 goods_list = GoodsModel.objects.filter( category_id=category_id).order_by('-price') elif sort == 'popular': #按人气排序 goods_list = GoodsModel.objects.filter( category_id=category_id).order_by('-popular') # 根据商品的列表goods_list进行分页 paginator = Paginator(goods_list, 2) page = paginator.page(page_num) cart_count = cart_count_goods(request, CartModel) context = { 'category': category, #商品的分类对象 'news': news, #新品推荐 'goods_list': goods_list, #排序后的商品列表 'sort': sort, #排序的条件 'cart_count': cart_count, #购物车中的商品的数量 'page': page, 'page_num': page_num, #当前的页数 } return render(request, 'goods/list.html', context)
def add(request, goods_id, count): """添加到购物车视图 接收两个参数 商品id和商品数量""" user_id = request.session['user_id'] # 查询购物车中是否已经有这个商品在这个人的名下 如果有 数量增加 如果没有 在购物车中添加 carts = CartModel.objects.filter(user_id=user_id, goods_id=goods_id) if len(carts) >= 1: cart = carts[0] cart.count = cart.count + count else: cart = CartModel() cart.user_id = user_id cart.goods_id = goods_id cart.count = count cart.save() # 如果是ajax请求 则返回一个json 否则重定向 if request.is_ajax(): cart_count = cart_count_goods(request) return JsonResponse({'cart_count': cart_count}) return redirect('/cart/')
def list(request,category_id,sort,page_num): """商品列表视图""" """category_id 分类id sort 排序字段(默认:default 价格:price 人气:popular) page_num 获取当前页的页码""" category = CategoryModel.objects.get(id=category_id) # 取出该类型中最新的两个商品 news = GoodsModel.objects.filter(category_id=category_id).order_by('-id')[:2] # 使用外键查找 # news = category.goodsmodel_set.order_by('-id')[:2] goods_list = [] if sort == 'default': goods_list = GoodsModel.objects.filter(category_id=category_id).order_by('id') elif sort == 'price': goods_list = GoodsModel.objects.filter(category_id=category_id).order_by('price') elif sort == 'popular': goods_list = GoodsModel.objects.filter(category_id=category_id).order_by('-popular') cart_count = cart_count_goods(request) # 根据商品的列表goods_list进行分页 paginator = Paginator(goods_list,2) page = paginator.page(page_num) context = { 'category':category, # 商品的分类对象 'news':news, # 新品推荐 'goods_list':goods_list, # 排序后的商品列表 'sort':sort, # 排序的条件 'cart_count':cart_count, # 购物车中的商品数量 'page':page, # 分页信息 'page_num':page_num # 当前页码 } return render(request,'goods/list.html',context)
def goods_list(request, category_id, sort, page_num): """商品列表视图""" """ category_id 分类的id page_num 获取当前页的页码 sort 排序的字段 默认:default 价格:price 人气:popular """ category = CategoryModel.objects.get(id=category_id) categorys = CategoryModel.objects.all() # 取该类型的最新的两个商品 news = GoodsModel.objects.filter(category_id=category_id).order_by("-id")[:2] goods_list = [] goods_query_set = GoodsModel.objects.filter(category_id=category_id) if sort == "default": # 默认排序 最新的在上面 goods_list = goods_query_set.order_by("-id") elif sort == "price": goods_list = goods_query_set.order_by("-price") elif sort == "popular": goods_list = goods_query_set.order_by("-popular") # 根据商品的列表goods_list,进行分页 paginator = Paginator(goods_list, 3) page = paginator.page(page_num) cart_count = cart_count_goods(request, CartModel) context = { "category": category, "categorys": categorys, "news": news, "sort": sort, "goods_list": goods_list, "page": page, "page_num": int(page_num), "cart_count": cart_count, } return render(request, "df_goods/list.html", context)
def index(request): """主页""" # 拿出所有的分类 category_list = CategoryModel.objects.all() # 分别取出每个分类下最新的商品 new_goods_dict = {} # 存储每个分类下的最新商品 for category in category_list: goods_list = GoodsModel.objects.filter(category_id=category.id).order_by('-id')[:4] new_goods_dict[category] = goods_list # goods_list = CategoryGoodsModel.objects.filter(category_id=category.id).order_by('-goods_id')[:4] # # 拿到查询出的所有的goods的id # goods_ids = [goods.goods_id for goods in goods_list] # goods_info_list = GoodsModel.objects.filter(id__in=goods_ids) # new_goods_dict[category] = goods_info_list cart_count = cart_count_goods(request) context = { 'new_goods_dict':new_goods_dict, 'cart_count':cart_count } return render(request,'goods/index.html',context)
def index(request): """主页""" # 拿出所有的分类 category_list = CategoryModel.objects.all() # 分别取出分类下的最新的商品 new_goods_dict = {} # 存储每个分类下的最新的商品 for category in category_list: # goods_list = CategoryGoodsModel.objects.filter(category_id=category.id).order_by("-goods_id")[:4] # 拿到查询出的所有的goods的id # goods_ids = [goods.goods_id for goods in goods_list] # print(goods_ids) # 修改了商品model之后的逻辑 # 直接通过商品分类id从goods中获取当前分类的商品 goods_info_list = GoodsModel.objects.filter( category_id=category.id).order_by("-id")[:4] print(goods_info_list) new_goods_dict[category] = goods_info_list # 从session中拿到user的id cart_count = cart_count_goods(request, CartModel) context = {"new_goods_dict": new_goods_dict, "cart_count": cart_count} print(context) return render(request, "goods/index.html", context)