Django视图如何实现重定向回当前页面?删除购物车出现循环请求如何解决
问题原因
你出现循环请求的核心原因是request.path_info指向的就是当前cart_remove_retail删除视图对应的路由地址,删除逻辑执行完后再次跳转回删除路由,会反复触发「执行删除→跳转删除路由」的逻辑,自然就形成了死循环。
解决方案
方案1:后端直接重定向回操作前的页面(适合普通表单提交的删除请求)
从请求头的HTTP_REFERER字段获取用户触发删除操作前所在的页面地址,以此作为重定向目标,同时加兜底路由避免获取不到来源页时报错:
from django.shortcuts import redirect def cart_remove_retail(request, slug): cart = Cart(request) product = get_object_or_404(Product, slug=slug) cart.remove(product) # 第二个参数替换为你项目中购物车页/商品列表页对应的路由名称作为兜底 return redirect(request.META.get('HTTP_REFERER', 'cart_list'))
方案2:前端控制刷新(适合弹窗触发的AJAX异步删除请求)
如果你的删除操作是弹窗发起的异步请求,不需要后端做重定向,后端直接返回操作状态,前端收到成功响应后刷新当前页即可,交互体验更流畅:
后端代码调整为:
from django.http import JsonResponse def cart_remove_retail(request, slug): cart = Cart(request) product = get_object_or_404(Product, slug=slug) cart.remove(product) return JsonResponse({'code': 0, 'msg': '删除成功'})
前端收到成功响应后执行window.location.reload()即可刷新当前页面。
注意事项
- 少数浏览器、安全插件会主动屏蔽
HTTP_REFERER请求头,所以一定要设置兜底跳转路由,避免请求报错。 - 涉及购物车修改的操作建议做好权限校验,避免非用户本人操作修改购物车内容。
内容的提问来源于stack exchange,提问作者Vitalii Bashynskyi
相关产品推荐
相关产品推荐

