Django rest框架:从外部软件包中捕获ValidationError

时间:2018-07-03 11:58:26

标签: python django exception-handling django-rest-framework

我正在使用django-rest-passwordreset软件包来实现密码重置端点。 当给定的电子邮件不存在时,它将引发ValidationError异常,从而导致500错误。如何捕获此错误,然后返回400?我只是添加了如下所示的网址,所以我认为我不能在其周围加上try: except或类似内容。

  

urlpatterns = [
  ...
  url(r'^ password / recover /',include('django_rest_passwordreset.urls')),
  ...   ]

例外:

  

ValidationError位于/ password / recover /   {'email':['没有与该电子邮件地址关联的活动用户,或者无法更改密码']}
  请求方法:POST   要求网址:http://192.168.99.100:8000/password/recover/
  Django版本:2.0.6
  追溯:
  内部文件“ /usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py”     35. response = get_response(request)
  _get_response中的文件“ /usr/local/lib/python3.6/site-packages/django/core/handlers/base.py”     128. response = self.process_exception_by_middleware(e,request)
  _get_response中的文件“ /usr/local/lib/python3.6/site-packages/django/core/handlers/base.py”     126. response = wrapd_callback(request,* callback_args,** callback_kwargs)
  包装的视图中的文件“ /usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py”     54. return view_func(* args,** kwargs)
  视图中的文件“ /usr/local/lib/python3.6/site-packages/django/views/generic/base.py”     69. return self.dispatch(request,* args,** kwargs)
  分派中的文件“ /usr/local/lib/python3.6/site-packages/rest_framework/views.py”     483. response = self.handle_exception(exc)
  handle_exception中的文件“ /usr/local/lib/python3.6/site-packages/rest_framework/views.py”     443. self.raise_uncaught_exception(exc)
  分派中的文件“ /usr/local/lib/python3.6/site-packages/rest_framework/views.py”     480. response = handler(request,* args,** kwargs)
  帖子中的文件“ /usr/local/lib/python3.6/site-packages/django_rest_passwordreset/views.py”     116. code ='invalid')}
  异常类型:/ password / recover /处的ValidationError   异常值:{'email':['没有活动的用户与此电子邮件地址关联或不能更改密码']}
  索取信息:
  使用者:AnonymousUser
  GET:没有GET数据
  POST:无POST数据
  文件:无文件数据
  COOKIES:没有Cookie数据
  标题:“电子邮件”:“ bob@thebuilder.com”

1 个答案:

答案 0 :(得分:0)

我设法通过创建自定义的异常处理程序来解决它,如here所述。
附加信息:
-过滤特定的错误消息,以避免捕获所有ValidationErrors,
-否则,返回标准Django异常响应。