在哪里初始化Django会话变量?

时间:2010-12-22 21:01:30

标签: python django session

在我的Django项目中,我正在构建一个购物车系统。我想将购物车数据存储在会话变量中,但我不知道在哪里初始化它。

我尝试过这样的事情:

if 'cart' not in request.session:
    request.session['cart'] = {}

在自定义上下文处理器中,但上下文处理器似乎没有修改会话数据。我还能在哪里进行这样的初始化?我不想把它放在我从购物车中获取价值的每个地方。

4 个答案:

答案 0 :(得分:5)

你可以把它放在custom request middleware的一块中,但说实话,我认为这样做太过分了。在视图函数中需要时,可能更容易初始化购物车。请注意,如果该值尚不存在,您可以使用request.session.get自动获取默认值。类似的东西:

def my_view(request):
    cart = request.session.get('cart', {})
    # Do stuff with cart
    request.session['cart'] = cart

答案 1 :(得分:1)

在中间件(在会话中间件下面,显然)这样做会确保它始终设置。

答案 2 :(得分:0)

为什么需要测试购物车是否在request.session中。为什么不这样做:

cart_value = request.session.get('cart',{})

基本上该做的是在会话中返回'cart'的值,如果购物车中没有值,则返回空字典。

答案 3 :(得分:0)

假设您的视图始终使用RequestContext,您的代码应该与context_processor一样

基于几年前的Satchmo,我对我的购物车做了同样的事情。 我有一个context_processor,我从会话中找到Cart并将其传递给模板。 那里也进行了很多其他会话修改......

所以..你的代码应该按原样运行。它在执行吗?它安装了吗?