KeyError这表示密钥(伙伴)不在dict中?

时间:2010-05-25 09:12:45

标签: python django

我正在尝试使用python和django创建聊天应用程序。我几乎完成它并且它工作正常8-10分钟,当两个人在那段时间聊天后显示错误。

这里是追溯: -

Traceback (most recent call last):

  File "\Django_chat\django_chat\chat\views.py", line 55, in receive

    message = chatSession.getMessage(request.session['partner'],request.session['uid'],afterTime)

  File "C:\Python26\lib\site-packages\django\contrib\sessions\backends\base.py", line 47, in __getitem__

    return self._session[key]

KeyError: 'partner'

这是接收模块: -

def receive(request):
    # message received by this user
    chatSession = chat()
    data = request.POST
    afterTime = data['lastMsgTime']
    try:
        message = chatSession.getMessage(
            request.session['partner'],
            request.session['uid'],
            afterTime)
    except:
        #partnerId = virtual_users.objects.get(id=request.session['uid']).partner
        print('there is an error in receive request')
        traceback.print_exc(file=open("/myapp.log","a"))
    msg = serializers.serialize("json", message)
    return HttpResponse(msg)

请帮帮我:( 谢谢 Ansh J

2 个答案:

答案 0 :(得分:3)

我假设用户的会话超时,因此request.session中没有partneruid值。

会话根据他们的(缺乏)活动计时。读取会话不会被视为过期目的的活动。 Session expiration是从上次修改会话时计算出来的。默认情况下,Django仅在会话被修改时保存到会话数据库 - 即,如果已分配或删除任何字典值。要更改此默认行为,请将SESSION_SAVE_EVERY_REQUEST设置为True。如果SESSION_SAVE_EVERY_REQUEST为True,Django将在每个请求中将会话保存到数据库。

答案 1 :(得分:0)

尝试

print 'request.session contains ', repr(request.session)

except套件中。字典是否缺少除'partner'作为键的项目以外的任何内容?它是空的吗?无论如何,试着弄清楚它是如何变成这样的原因。