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