【发布时间】: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