【问题标题】:Django rest framework: catch ValidationError from external packageDjango rest 框架:从外部包中捕获 ValidationError
【发布时间】:2018-12-11 17:42:30
【问题描述】:

我正在使用django-rest-passwordreset 包来实现密码重置端点。 当给定的电子邮件不存在时,它会引发 ValidationError 异常,从而导致 500 错误。我怎样才能捕捉到这个错误,并返回一个 400 呢?我只是添加了如下所示的 url,所以我认为我不能用 try: except 或类似的东西包围它。

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

例外:

/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 = Wrapped_callback(request, *callback_args, **callback_kwargs)
Wrapped_view 中的文件“/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. 响应 = 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. 响应 = 处理程序(请求,*args,**kwargs)
帖子中的文件“/usr/local/lib/python3.6/site-packages/django_rest_passwordreset/views.py” 116. 代码='无效')}
异常类型:/password/recover/ 处的 ValidationError 异常值:{'email': ['没有与此电子邮件地址关联的活动用户或密码无法更改']}
索取资料:
用户:匿名用户
GET:没有 GET 数据
POST:没有 POST 数据
文件:没有文件数据
COOKIES:没有 cookie 数据
标题:“电子邮件”:“bob@thebuilder.com”

【问题讨论】:

  • ValidationError 应该抛出 400 而不是 500。您可以将异常消息与 traceback 一起发布吗?
  • 当您的 url 不正确并且找不到视图时会出现错误 500。
  • 我可以看看你的 urls.py 文件吗?
  • @mariodev:添加了 ValidationError 回溯。相关的 urlpattern 已经存在,并且适用于正确的电子邮件地址。

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


【解决方案1】:

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

【讨论】:

  • 我觉得你最好手动重置密码
猜你喜欢
  • 2020-08-25
  • 1970-01-01
  • 2018-07-23
  • 2015-12-07
  • 2019-03-05
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多