2012-04-12 78 views
1

,我發現了以下錯誤:Django的profies和request.user - 錯誤

'AnonymousUser' object has no attribute 'get_profile'

後添加以下的中間件,並嘗試登錄到我的網站,而不具有之前登錄:

class TimezoneMiddleware(object): 
    def process_request(self, request): 
     try: 
      driver = request.user.get_profile() 
      timezone.activate(driver.timezone) 
     except ObjectDoesNotExist: 
      timezone.activate('UTC') 

在回溯中,錯誤發生在try語句的第一行。

在此先感謝您的幫助!

+0

保護邏輯登錄用戶通過「如果request.user.is_authenticated():」保護線 – okm 2012-04-12 14:40:46

+0

感謝那些工作。如果您將答案作爲答案提交,我很高興將您的答案標記爲正確答案。再次感謝 – mb52089 2012-04-12 15:12:37

回答

3

對於用戶不登錄,request.userAnonymousUser實例,它不包含get_profile。我們可以檢查是否request.user已被記錄,並通過if request.user.is_authenticated():

def process_request(self, request): 
    if request.user.is_authenticated(): 
     try: 
      driver = request.user.get_profile() 
      timezone.activate(driver.timezone) 
     except ObjectDoesNotExist: 
      timezone.activate('UTC') 
0

request.user.get_profile()可能會引發一個AttributeError的,你應該嘗試以下

class TimezoneMiddleware(object): 
    def process_request(self, request): 
     try: 
      driver = request.user.get_profile() 
      timezone.activate(driver.timezone) 
     except ObjectDoesNotExist, AttributeError: 
      timezone.activate('UTC')