Подсчет полностью отрендеренных запросов

Я не новичок в Django (опыт работы 1 год), но у меня есть странная задача, с которой я не могу справиться. Поэтому мне нужно написать промежуточное ПО, которое будет считать запросы, но только те, которые не были прерваны клиентом (те, которые были полностью обработаны в браузере).

Я обнаружил, что когда клиент прерывает соединение, сервер (Python) выдает errno 32 Broken Pipe, так как это происходит из-за неудачной записи в сокет [я думаю, что соединение сервер-клиент там TCP, так что в этом нет ничего странного].

Но проблема в том, что я не могу найти способ проверить, полностью ли браузер отобразил страницу, или проверить, произошла ли эта ошибка (конечно, эта ошибка может иметь другое происхождение, но это было бы хорошим началом).

О, и я не хочу использовать JS (с JS это проще простого), но я могу использовать HTML5 (если это поможет...)


person Piotr Jaszkowski    schedule 13.05.2012    source источник
comment
Вы можете попробовать разместить изображение веб-ошибки (1px x 1px) в самом низу страницы. Возможно, загрузите его через view() (в отличие от вашего статического сервера). Нет никакой гарантии, что страница будет отображаться на 100% в этот момент, но в основном это должно быть сделано. И поскольку вы не упоминаете JS для проверки, я предполагаю, что вы не используете JS для самой страницы.   -  person Peter Rowell    schedule 14.05.2012
comment
Да, я думал об этом (я уже делал что-то подобное), но я не уверен, что это то, чего хочет мой «клиент». Он сказал промежуточное ПО...   -  person Piotr Jaszkowski    schedule 14.05.2012
comment
Похоже, ваш клиент может делать то, что я называю спецификациями: слишком точно указывать желаемый конечный результат и как его достичь. Предполагая, что это не домашнее задание, возможно, самое время сесть с вашим клиентом, уточнить желаемый конечный результат, а затем заявить о некоторой технической независимости в отношении того, как его достичь.   -  person Peter Rowell    schedule 14.05.2012


Ответы (1)


Возможно, я нашел ответ на ваш вопрос, то есть выполнить некоторый код при отправке HTTPResponse. Затем вы можете увеличить то, что хотите, после того, как страница будет полностью отправлена ​​​​клиенту.

В примере создается подкласс HttpResponse и явно возвращается экземпляр производного класса в представлении. Если у вас есть много представлений, которые вы не хотите переопределять, возможно, вы могли бы попробовать этот фрагмент кода в своем определении подкласса.

HttpResponse.__bases__ += (FullLoggingHttpResponse,)
person Steve K    schedule 13.05.2012
comment
Выглядит многообещающе, позже проверю. Если получится, то соглашусь. Что касается проблемы, которую вы указали, я думаю, что декораторы справятся с этой задачей. - person Piotr Jaszkowski; 14.05.2012