Error handling Django rest framework 3.10.3未运行异常处理程序

Error handling Django rest framework 3.10.3未运行异常处理程序,error-handling,django-rest-framework,Error Handling,Django Rest Framework,我正在尝试我的第一个djangorestframework应用程序,我使用的是djangorestframework==3.10.3 我创建了一个简单的项目: ./mysite ./mysite/__init__.py ./mysite/settings.py ./mysite/urls.py ./mysite/wsgi.py ./db.sqlite3 ./polls ./polls/migrations ./polls/migrations/__init__.py ./polls/models

我正在尝试我的第一个djangorestframework应用程序,我使用的是djangorestframework==3.10.3

我创建了一个简单的项目:

./mysite
./mysite/__init__.py
./mysite/settings.py
./mysite/urls.py
./mysite/wsgi.py
./db.sqlite3
./polls
./polls/migrations
./polls/migrations/__init__.py
./polls/models.py
./polls/__init__.py
./polls/apps.py
./polls/admin.py
./polls/exceptions.py
./polls/tests.py
./polls/urls.py
./polls/views.py
./manage.py
我在polls应用程序中有一个视图,它只抛出一个ParseError,这是一个ApiException(根据文档,它是由CustomException处理的)

这是我的自定义异常,位于polls/exceptions.py

从rest\u framework.views导入异常\u处理程序

def base_exception_handler(exc, context):
    print('DEBUUUUUUUUUG!!!!!!!')
    return JsonResponse({"message": "base exception", "status": 404}, status=404)
最后是mysite/settings.py—注册自定义异常处理程序(文件的所有其余部分都是默认的):

运行服务器并导航到在I get中定义的视图时:

  • 如果我将debug设置为True,我将获得包含我引发的异常的异常页面
  • 如果我将debug设置为False,我会得到一个带有服务器错误(500)
  • 我试图通过在rest\u framework.views.exception\u处理程序中设置断点来检查是否执行了默认异常处理程序(我没有更改任何设置,因此它应该使用文档中描述的默认值),但是没有调用它。我得到了一个HTML页面的响应

    以下是我正在使用的软件包(requirements.txt):


    感谢您的帮助。

    如果有人面临同样的问题,以下是解决方案。问题是函数视图缺少@api_view()装饰器,这修复了问题:

    from django.views.decorators.csrf import csrf_exempt
    from rest_framework.exceptions import ParseError
    from rest_framework.decorators import api_view
    
    # Create your views here.
    @csrf_exempt
    @api_view()
    def test_view(request):
            raise ParseError("test!", 409)
    
    如果文档能更详细一些,那就太好了

    ...
    INSTALLED_APPS = [
        'polls.apps.PollsConfig',
        'rest_framework',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]
    ...
    REST_FRAMEWORK = {
        'EXCEPTION_HANDLER': 'polls.exceptions.base_exception_handler',
    }
    
    Django==2.2.7
    djangorestframework==3.10.3
    pytz==2019.3
    sqlparse==0.3.0
    
    from django.views.decorators.csrf import csrf_exempt
    from rest_framework.exceptions import ParseError
    from rest_framework.decorators import api_view
    
    # Create your views here.
    @csrf_exempt
    @api_view()
    def test_view(request):
            raise ParseError("test!", 409)