Как класс process_request может нормально работать для класса промежуточного программного обеспечения Django, но исключение process_exquest не может быть вызовом? - PullRequest
4 голосов
/ 24 июня 2011

Я создал свой собственный класс промежуточного программного обеспечения в Django, который до недавнего времени работал просто отлично. Странно то, что process_request по-прежнему вызывается просто отлично, но даже если ответ 500 - внутренняя ошибка сервера, process_exception вообще не вызывается. Почему?

Не имеет значения, объявляю ли я свой класс промежуточного ПО первой или последней записью в списке установленного промежуточного ПО в файле настроек.

Спасибо, Dave

Ответы [ 2 ]

7 голосов
/ 03 мая 2012

process_exception вызывается только тогда, когда представление поднимает Exception. Как говорится в комментарии

Если представление вызвало исключение, запустите его через промежуточное ПО исключений,
и если промежуточное ПО исключения возвращает ответ, используйте его.
В противном случае создайте исключение.

Исключения, вызванные неправильной настройкой, ошибкой импорта, process_request и process_view не могут быть перехвачены и переданы обработчикам process_exception.

Чтобы проверить, работает ли ваш process_exception, поднимите Исключение в представлении после того, как убедитесь, что оно работает хорошо.

Между process_request и process_exception нет прямой связи, они являются обработчиками для разных целей и вызываются на разных этапах. Любое Исключение, созданное после process_request, которое успешно выполнено и перед представлением, не будет перехвачено и обработано process_exception, как сказано.

2 голосов
/ 08 мая 2012

Согласно документации, process_exception,

process_exception(self, request, exception)

принимает объект HttpRequest, объект Exception, возбуждаемый функцией представления в качестве аргументов, и возвращает HttpResponseobject в качестве ответа. Поэтому он не будет вызываться, когдаКод вызывает ошибку 500 (объект HttpResponse). Исключение process_exception будет вызываться только для неперехваченного исключения в представлениях.

...