关于python:在Django Rest Framework中找不到资源时返回自定义404错误

Return Custom 404 Error when resource not found in Django Rest Framework

我正在学习Django REST框架,也是Django的新成员。当客户机访问未找到的资源时,我想返回JSON中的自定义404错误。

我的urls.py看起来像这样:

1
2
3
urlpatterns = [
    url(r'^mailer/$', views.Mailer.as_view(), name='send-email-to-admin')
]

其中我只有一个资源,可以通过uri访问,http://localhost:8000/mailer/

现在,当客户端访问任何其他URI(如http://localhost:8000/)时,API应该返回这样的404-Not Found错误:

1
2
3
4
{
   "status_code" : 404
   "error" :"The resource was not found"
}

如果合适的话,请用适当的代码片段提出一些答案。


你在找handler404

我的建议是:

  • 创建一个视图,如果所有URL模式都不匹配,则应调用该视图。
  • 在根urlconf中添加handler404 = path.to.your.view
  • 这是如何做到的:

  • 埃多克斯1〔2〕

    1
    2
    3
    4
    5
    6
    7
    8
    from django.http import JsonResponse


    def custom404(request, exception=None):
        return JsonResponse({
            'status_code': 404,
            'error': 'The resource was not found'
        })

  • 埃多克斯1〔3〕

    1
    2
    3
    4
    from project.views import custom404


    handler404 = custom404
  • 有关详细信息,请阅读错误处理。

    Django REST框架异常也可能很有用。


    根据Django文件:Django按顺序运行每个URL模式,并在第一个与请求的URL匹配的模式处停止。参考:https://docs.djangoproject.com/en/1.8/topics/http/urls/

    因此,您可以在创建的URL之后在url patterns中添加另一个URL,它应该匹配所有的URL模式,并将它们发送到返回404代码的视图中。

    即:

    1
    2
    3
    urlpatterns = [
    url(r'^mailer/$', views.Mailer.as_view(), name='send-email-to-admin'),
    url(r'^.*/$',views.Error404.as_view(),name='error404')]