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')