Django - request.session没有被保存

TJB*_*TJB 3 python django session view

我有一个非常简单的实用函数,如果它们是一个名为'orderId'的会话密钥,它将获得一个开放的Web订单,并且如果没有会话密钥则会创建一个,并且参数'createIfNotFound'在函数中等于true.使用我的调试器逐步执行它我可以看到在创建订单之后设置会话密钥的代码确实会被命中,但是当我检查Http请求对象的会话字段时,它没有该属性?

效用

def get_open_web_order(request, createIfNotFound=False):
    # Check for orderId in session
    order_id = request.session.get('orderId')
    web_order = None

    if None != order_id:
        try:
            web_order = WebOrder.objects.get(id=order_id, status='O')
            logging.info('Found open web order')
        except WebOrder.DoesNotExist:
            logging.info('Web order not found')

    if (None == web_order) and (createIfNotFound == True):
        logging.info('Creating new web order')

        web_order = WebOrder()
        web_order.status = 'O'

        web_order.save()
        request.session['orderId'] = web_order.id

        # Assign logged in user and default billing and shipping
        if request.user.is_authenticated() and hasattr(request.user, 'customer'):
            customer = request.user.customer
            web_order.customer = customer
            web_order.set_defaults_from_customer()
            web_order.save()

    return web_order
Run Code Online (Sandbox Code Playgroud)

414*_*0tm 9

在某些情况下,您需要明确告诉会话它已被修改.

您可以通过request.session.modified = True在更改内容后添加到视图中来执行此操作session

你可以在这里阅读更多内容 - https://docs.djangoproject.com/en/1.10/topics/http/sessions/#when-sessions-are-saved