Если вы хотите продолжить обработку, вы не захотите поднять ошибку. Это имеет ряд эффектов в зависимости от вашей настройки. Обычно повышение ошибки устанавливает статус на что-то отличное от 200, что, вероятно, не то, что вы хотите. Он, как правило, отключает любое ведение журнала исключений (в нашем случае он отправляет ошибки часовому), и он обычно автоматически откатывает транзакции с базой данных.
Если вы просто хотите отобразить предупреждение пользователю, потому что они сделали что-то «плохое», но продолжить обработку, вам понадобится другой механизм. У меня есть два разных способа обработки этой ситуации в зависимости от контекста. В большинстве случаев я автоматически показываю сообщение на следующей загрузке страницы (после сообщения с предупреждением), устанавливая файл cookie и отображая его. Что работает для вас, будет отличаться в зависимости от того, как настроено ваше приложение. Если ваши вызовы - это все вызовы ajax, у вас может быть объект для возврата предупреждений и других сообщений, встроенных в ваши вызовы ajax.
Другое дело, что для некоторых страниц, которые обрабатывают командные команды, где может быть много предупреждений, у нас есть специальная страница, которая загружается, если есть предупреждения, которые знают, как обрабатывать список предупреждений.
Вот наш код, который устанавливает и читает предупреждающее сообщение в Python. Это в нашем базовом классе контроллера, так что он доступен во всех контроллерах. Вы также можете написать прочитанную часть в javascript:
def flash(self, msg, msg_type="info"):
self.flash_info = (msg, msg_type)
self.set_cookie('flash', base64.b64encode(bytes(json.dumps([msg, msg_type]), 'utf-8')))
def get_flash(self):
msg = None
msg_type = None
if hasattr(self, "flash_info"):
msg, msg_type = self.flash_info
else:
flash_msg = self.get_cookie('flash')
if flash_msg:
msg, msg_type = json.loads(base64.b64decode(flash_msg).decode('utf-8'))
self.clear_cookie('flash')
self.clear_cookie('flash')
return msg, msg_type