Django UnreadablePostError: ошибка чтения данных запроса
Я работаю над проектом django, и я получил это сообщение об ошибке.
Трассировка стека
File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/core/handlers/wsgi.py", line 180, in _get_post
self._load_post_and_files()
File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/http/__init__.py", line 379, in _load_post_and_files
self._post, self._files = QueryDict(self.body, encoding=self._encoding), MultiValueDict()
File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/http/__init__.py", line 335, in body
self._body = self.read()
File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/http/__init__.py", line 391, in read
return self._stream.read(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/core/handlers/wsgi.py", line 98, in read
result = self.buffer + self._read_limited()
File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/core/handlers/wsgi.py", line 92, in _read_limited
result = self.stream.read(size)
UnreadablePostError: request data read error
Почему эта ошибка происходит?
Как решить?
Ответы
Ответ 1
Почему эта ошибка происходит?
потому что сервер получает неверный запрос, который может произойти по многим причинам. кто-то, возможно, отменил загрузку страницы, у кого-то может быть дрянное подключение к интернету, которое вырезано, космические лучи могли немного перевернуться.
Это не то, о чем вам действительно нужно беспокоиться, пока это не начнется очень часто. вы можете захотеть сделать заметку, когда произойдут эти ошибки, и посмотрите, будет ли она на той же странице или нет.
Как решить?
вы не можете. не по крайней мере в этот момент. собрать еще несколько данных о том, когда эта ошибка происходит точно. посмотрите, можете ли вы найти способ его запуска вручную.
Ответ 2
С помощью приложения в масштабе вы всегда будете получать случайный аннулированный запрос. Если вы получаете 500 писем, они могут быть довольно утомительными.
Я бы не советовал полностью игнорировать их. Если UnreadablePostErrors вливаются, то что-то не так, например. более длительное время ответа заставляет пользователей отменить запросы.
Мое решение состояло в том, чтобы игнорировать 1/20 UnreadablePostErrors. Таким образом, если что-то пойдет не так, я все равно буду проинформирован, но меня будут приставать в 20 раз меньше. Это немного грязно, но это сработало для меня.
import logging
import random
from django.http import UnreadablePostError
class ReduceUnreadablePostErrors(logging.Filter):
def filter(self, record):
if record.exc_info:
exc_value = record.exc_info[1]
if isinstance(exc_value, UnreadablePostError):
return random.randint(1,20) % 20==0
return True
settings.py:
'filters': {
'reduce_unreadable_post_errors' : {
'()' : 'path.to.your.ReduceUnreadablePostErrors'
},
...
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false','reduce_unreadable_post_errors'],
'class': 'common.utils.log.AdminEmailHandlerWithEmail'
},
...