Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 21, 2015 12:02:59

MParshinSK
Зарегистрирован: 2015-01-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

response.set_cookie() и UnicodeDecodeError на хостинге

Всем доброго времени суток!

Локально проблем нет, на хостинге (jino.ru) при попытке установить кукис выдает 500 ошибку, в логах UnicodeDecodeError.
Версия Django==1.6.7. Python 2.7

Ошибка вылетает в мидлваре в этом коде:

def process_response(self, request, response):
		
		expires = datetime.datetime.now() + datetime.timedelta(seconds=settings.REFERER_COOKIES_MAX_AGE)
		referer_url = request.META.get("HTTP_REFERER", None)
		
		if referer_url is not None and referer_url != "" and not self._is_local_domain(referer_url):
			#конкретно ошибка в следующей строке вылетает
			response.set_cookie('referer_url', referer_url.encode('utf-8'), 
								expires=expires.strftime("%a, %d-%b-%Y %H:%M:%S GMT"))
		return response


Вот что в логах:


mod_wsgi (pid=15562): Exception occurred processing WSGI script ‘/home/users/t/totalweb/domains/el-kalyan.net/django.wsgi’., referer: http://total-web.ru/test/

Traceback (most recent call last):, referer: http://total-web.ru/test/

File “/home/users/t/totalweb/env/elkalyanshop/lib/python2.7/site-packages/django/core/handlers/wsgi.py”, line 213, in __call__, referer: http://total-web.ru/test/

response_headers.append((str('Set-Cookie'), str(c.output(header='')))), referer: http://total-web.ru/test/

File “/usr/lib/python2.7/Cookie.py”, line 466, in output, referer: http://total-web.ru/test/

return “%s %s” % ( header, self.OutputString(attrs) ), referer: http://total-web.ru/test/

File “/usr/lib/python2.7/Cookie.py”, line 514, in OutputString, referer: http://total-web.ru/test/

return _semispacejoin(result), referer: http://total-web.ru/test/

UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xd0 in position 8: ordinal not in range(128), referer: http://total-web.ru/test/


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

Офлайн

#2 Янв. 21, 2015 14:28:23

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

response.set_cookie() и UnicodeDecodeError на хостинге

Я думаю проблема в том, что expires.strftime(“%a, %d-%b-%Y %H:%M:%S GMT”) возвращает имя дня недели и месяца кириллицей. (т.к. на сервере локаль может быть ru_RU)

Офлайн

#3 Янв. 21, 2015 15:46:32

MParshinSK
Зарегистрирован: 2015-01-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

response.set_cookie() и UnicodeDecodeError на хостинге

GreyZmeem, спасибо!

Да, в этом и была проблема. А я что-то как баран уперся в собственно устанавливаемое значение кукиса, а про дату и не подумал.

Обернул код в:

def process_response(self, request, response):
  saved = locale.setlocale(locale.LC_ALL)
  locale.setlocale(locale.LC_ALL, ('EN','UTF8'))
  <старый код>
  locale.setlocale(locale.LC_ALL, saved)

И все заработало. Еще раз спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version