Django管理后台访问和登录页面访问数据不一致的问题
Django管理后台访问和登录页面访问数据不一致的问题
问题现象
我再创建商品购物车功能后,发现这个功能页面需要放在管理后台。在测试功能时是直接配置路由访问http://localhost:8088/view_cart/是可以正常加载购物车的相关功能的,然后将购物车功能加到管理后台,添加之后发现没有查到任何数据。通过http://localhost:8088/view_cart/可以查看到购物车相关商品信息,通过http://localhost:8088/admin/goods_service/cart/查看为空。
代码配置
urlpatterns = [ path('view_cart/', view_cart, name='view_cart'), ] def add_to_cart(request, pk): product = get_object_or_404(Product, pk=pk) cart = request.session.get('cart', {}) cart[pk] = cart.get(pk, 0) + 1 request.session['cart'] = cart messages.success(request, f'{product.name}已添加到购物车') return redirect('list_product')
问题分析
通过路由直接访问可以访问购物车视图,而通过管理后台访问不到,那么就是获取数据源不一致的问题导致的。
从这个角度分析,然后Google了一下,就发现管理后台和正常视图访问的session不是同一个,就会出现这个问题。为了解决这个问题,我将数据保存到数据库进行处理,经过验证后台管理系统可以获取到购物车的信息了,再次的爬过一个坑。
解决方案
同时向会话和数据库中添加该数据,解决改问题。
def add_to_cart(request, pk): product = get_object_or_404(Product, pk=pk) #数据保存在session中 cart = request.session.get('cart', {}) cart[pk] = cart.get(pk, 0) + 1 request.session['cart'] = cart # 将商品添加到数据库的购物车表中 cart_item, created = Cart.objects.get_or_create(user=request.user, product=product) if not created: cart_item.quantity += 1 else: cart_item.quantity = 1 cart_item.save() messages.success(request, f'{product.name}已添加到购物车') return redirect('list_product')