我正在尝试测试django rest框架中的异常.基于http://www.django-rest-framework.org/api-guide/exceptions/引发NotFound,
默认情况下,此异常会导致HTTP状态代码"404 Not Found"的响应.
但是当我发出GET(到/ example1)时,我得到500,
Request Method: GET
Request URL: http://192.168.59.103:8002/example1
Django Version: 1.8.3
Exception Type: NotFound
Exception Value:
not found
Exception Location: /home/djangoapp/testtools/api/views.py in example1, line 7
Python Executable: /usr/bin/python
Run Code Online (Sandbox Code Playgroud)
详情如下,
settings.py
REST_FRAMEWORK = {'EXCEPTION_HANDLER':'rest_framework.views.exception_handler'}
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
)
Run Code Online (Sandbox Code Playgroud)
urls.py
from django.conf.urls import include, url
from api import views
urlpatterns = [
url(r'example1', views.example1),
]
Run Code Online (Sandbox Code Playgroud)
views.py
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.exceptions import APIException,ParseError,NotFound
def example1(request):
raise NotFound("not found")
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?
Arp*_*yal 15
from rest_framework.exceptions import NotFound
Run Code Online (Sandbox Code Playgroud)
课程NotFound从以下扩展而来APIException.APIExceptionis 的默认状态代码500 Internal Server Error,而NotFoundis 的默认状态代码404.
所以根据我在这里你试图rest framework在纯粹的django视图中抛出一个异常.我在这里写了一个测试用例来检查获得错误的几率.猜猜尝试引发rest framework异常的简单django视图不会被视为视图的错误.但是在提供装饰器并将其声明为API视图时,它会进入exception_handler
所以当你这样做时:
from rest_framework.decorators import api_view
@api_view()
def example1(request):
raise NotFound('not found')
Run Code Online (Sandbox Code Playgroud)
现在,这被认为是由API引发的异常,它输入rest_framework EXCEPTION_HANDLER您提供的默认值,返回任何给定异常的响应.
它docstring说:
返回应该用于任何给定异常的响应.默认情况下,我们处理REST框架
APIException,也Django的内置ValidationError,Http404以及PermissionDenied例外.任何未处理的异常都可能返回None,这将导致引发500错误.