Найти - Пользователи
Полная версия: response.set_cookie() и UnicodeDecodeError на хостинге
Начало » Django » response.set_cookie() и UnicodeDecodeError на хостинге
1
MParshinSK
Всем доброго времени суток!

Локально проблем нет, на хостинге (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/


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

И все заработало. Еще раз спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB