2010-05-25 171 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'之外的其他項目?它是空的嗎?不管怎樣,試着弄清楚爲什麼會這樣。