django profies и request.user - ошибка

Я получаю следующую ошибку:

Объект AnonymousUser не имеет атрибута 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.

Заранее спасибо за помощь!

2 ответа

Решение

Для не авторизованных пользователей, request.user является AnonymousUser экземпляр, который не содержит 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')

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')
Другие вопросы по тегам