Да, это выглядит хорошо.
Также взгляните на pylons.controllers.utils.abort () . В любом месте кода вашего контроллера вы можете сделать abort(some_http_code[, message])
. Типичные HTTP-коды, которые будут использоваться с этим, будут 404 («Страница не найдена», клиент ищет что-то, чего там нет), 403 («Запрещено», пользователю не разрешен доступ к этой странице / ресурсу), 400 («Плохо» запрос ", проверка параметров запроса не удалась) и другие. Эта функция также работает, генерируя специальные исключения, затем перехватывая их и возвращая стандартные страницы ошибок где-то из стека промежуточного программного обеспечения.
Конечно, вы также можете позвонить abort()
из моделей и других мест, а не только из контроллеров. Но это будет плохой стиль, смешивать логику контроллера с логикой модели, прыгать по уровням абстракций.
Наконец, для состояний ошибок, которые, как вы ожидаете, являются общими, рассмотрите возможность не использовать исключения, а вместо этого использовать коды возврата функций. Исключения, которые накапливаются в течение длительного времени, могут нарушить инкапсуляцию (удаленные компоненты должны знать об исключениях друг друга и о том, как с ними обращаться).