2010-05-25 179 views
4

我正在尝试使用python和django制作聊天应用程序。我几乎完成它,它的工作罚款8-10分钟,当两个人聊天后,在一定的时间显示错误。KeyError这说的关键(伙伴)是不是在字典?

这里是回溯: -

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Ĵ

回答

3

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

会话根据(缺少)活动超时。阅读会话不被视为有效到期的活动。 Session expiration是从上次修改会话时计算出来的。默认情况下,Django只会在会话被修改时保存到会话数据库 - 也就是说,如果它的任何字典值已被分配或删除。要更改此默认行为,请将SESSION_SAVE_EVERY_REQUEST设置为True。如果SESSION_SAVE_EVERY_REQUEST为True,则Django将在每个请求中将会话保存到数据库。

+0

谢谢,但它仍然显示同样的错误... – 2010-05-25 10:25:03

+0

你设置'SESSION_SAVE_EVERY_REQUEST'到TRUE;?你确定用户已经登录了吗? – Amarghosh 2010-05-25 10:39:56

+0

它为最后回复抱歉,其实我已经安装2个版本的Python,并取得了wronge一个变化就是为什么它不工作是,但现在它的工作。 谢谢:) – 2010-05-25 11:03:44

0

尝试

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

在您的except套房。字典是否缺少除'partner'之外的其他项目?它是空的吗?不管怎样,试着弄清楚为什么会这样。