我正在使用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”
答案 0 :(得分:0)
我设法通过创建自定义的异常处理程序来解决它,如here所述。
附加信息:
-过滤特定的错误消息,以避免捕获所有ValidationErrors,
-否则,返回标准Django异常响应。