我有一个非常简单的实用程序函数,如果它们是名为' orderId'的会话密钥,则会获得一个开放的Web订单,并且如果没有会话密钥,则会创建一个,并且参数' createIfNotFound'在函数中等于true。使用我的调试器逐步执行它我可以看到在创建订单之后设置会话密钥的代码段确实没有异常,但是当我检查Http请求对象时#39;会话字段,它没有该属性?
效用
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
答案 0 :(得分:9)
在某些情况下,您需要明确告诉会话它已被修改。
您可以在更改request.session.modified = True
session
来执行此操作
您可以在此处详细了解 - https://docs.djangoproject.com/en/1.10/topics/http/sessions/#when-sessions-are-saved
答案 1 :(得分:0)
我遇到了类似的问题,结果我在 settings.py 中将 SESSION_COOKIE_DOMAIN 设置为不正确的域,因此它不会保存任何会话数据。如果您使用的是 SESSION_COOKIE_DOMAIN,请尝试检查。