Django rest framework: отловить ValidationError из внешнего пакета - PullRequest
0 голосов
/ 03 июля 2018

Я использую пакет django-rest-passwordreset для реализации конечных точек сброса пароля. Когда данное письмо не существует, оно выдает исключение ValidationError, вызывая ошибку 500. Как я могу поймать эту ошибку и вернуть вместо нее 400? Я просто добавил URL-адреса, как показано ниже, поэтому я не думаю, что смогу окружить их try: except или чем-то подобным.

urlpatterns = [
...
url (r '^ пароль / recovery /', include ('django_rest_passwordreset.urls')),
... ]

Исключение:

Ошибка Validation в / пароль / восстановить / {'email': ['Нет активных пользователей, связанных с этим адресом электронной почты, или пароль нельзя изменить']}
Способ запроса: POST URL запроса: http://192.168.99.100:8000/password/recover/
Версия Django: 2.0.6
Traceback:
Файл "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py" во внутреннем 35. response = get_response (запрос)
Файл "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" в _get_response 128. response = self.process_exception_by_middleware (e, request)
Файл "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" в _get_response 126. response = wrapped_callback (запрос, * callback_args, ** callback_kwargs)
Файл "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py" в wrapped_view 54. return view_func (* args, ** kwargs)
Файл "/usr/local/lib/python3.6/site-packages/django/views/generic/base.py" в представлении 69. вернуть self.dispatch (запрос, * args, ** kwargs)
Файл "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" отправляется 483. response = self.handle_exception (exc)
Файл "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" в handle_exception 443. self.raise_uncaught_exception (exc)
Файл "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" отправляется 480. response = обработчик (запрос, * args, ** kwargs)
Файл "/usr/local/lib/python3.6/site-packages/django_rest_passwordreset/views.py" в записи 116. code = 'invalid')}
Тип исключения: ValidationError в / пароль / восстановить / Значение исключения: {'email': ['Нет активных пользователей, связанных с этим адресом электронной почты, или пароль не может быть изменен']}
Запрос информации:
ПОЛЬЗОВАТЕЛЬ: AnonymousUser
GET: нет данных GET
POST: нет данных POST
ФАЙЛЫ: Нет данных ФАЙЛОВ
COOKIES: нет данных cookie
HEADERS: "электронная почта": "bob@thebuilder.com"

1 Ответ

0 голосов
/ 04 июля 2018

Мне удалось решить эту проблему путем создания пользовательского обработчика исключений, как описано здесь .
Дополнительная информация:
- Фильтр на конкретное сообщение об ошибке, чтобы избежать перехвата ВСЕ ValidationErrors,
- В противном случае вернуть стандартный ответ об исключении Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...