Перелопатил весь инет, но так и не нашел ответ на вопрос, как же лучше обрабатывать ошибки и исключения в представлениях? Просьба показать правильный пример обработки ошибок в представлениях с использованием исключений.
Один из подходов нашел такой:
if not form['name']:
errors.append('Заполните имя')
if '@' not in form['email']:
errors.append('Введите корректный e-mail')
if not form['message']:
errors.append('Введите сообщение')
if not errors:
# ... сохранение данных в базу
return HttpResponse('Спасибо за ваше сообщение!')
return render(request, 'contact.html', {'errors': errors, 'form':form})
Вот как сделано у меня:
# Перевод валют на другой аккаунт
class TransferView(LoginRequiredMixin, FormView):
form_class = TransferForm
template_name = 'currency/transfer.html'
def form_valid(self, form):
try:
# Получаем кол-во кредитов пользователя
user_credits = OperationSum.objects.get(login=self.request.user, currency=2)
# Достаем из формы сумму перевода
transfer_sum = form.cleaned_data['sum']
if user_credits.sum < transfer_sum:
raise ValidationError(_('Недостаточно кредитов для перевода'))
except(KeyError, OperationSum.DoesNotExist):
# У пользователя отсутствуют кредиты
form.add_error(None, _('Вы не имеете кредитов'))
except (ValidationError):
# Ошибка валидации
form.add_error(None, _(ValidationError.messages[0]))
finally:
# Независимо от того, есть ли ошибки или нет, отрисовываем форму
return render(self.request, self.template_name, {
'form': form,
})
Здесь следующие проблемы ValidationError.messages[0] не возвращает текст сообщения: Недостаточно кредитов для перевода. Я так понимаю, что надо свое исключение изобрести для удобства вывода месаг?
В общем мне нужна помощь, как правильно поступить, чтобы не городить мусор в дальнейшем.
Updated 26 Aug. 2015, 20:06 by Key.