Возврат пользовательской ошибки 404, когда ресурс не найден в Django Rest Framework

Я учусь Django Rest Framework, а также новый для django. Я хочу вернуть custom 404 ошибка в json, когда клиент получит доступ к ресурсу, который не был найден.

мой urls.py выглядит liks это:

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 ошибка такая:

{
    "status_code" : 404
    "error" : "The resource was not found"
}

пожалуйста, предложите некоторый ответ с соответствующими фрагментами кода, если это подходит.

2 ответов


вы ищете handler404.

вот мое предложение:

  1. создайте представление, которое должно вызываться, если ни один из шаблонов URL не совпадает.
  2. добавить handler404 = path.to.your.view к вашему корневому URLconf.

вот как это делается:

  1. project.views

    from django.http import JsonResponse
    
    
    def custom404(request):
        return JsonResponse({
            'status_code': 404,
            'error': 'The resource was not found'
        })
    
  2. project.urls

    from project.views import custom404
    
    
    handler404 = custom404
    

читать обработка ошибок дополнительные подробности.

Django Rest framework исключения может быть полезно, а также.


согласно документации django : Django проходит через каждый шаблон URL-адреса по порядку и останавливается на первом, который соответствует запрошенному URL-адресу. ref:https://docs.djangoproject.com/en/1.8/topics/http/urls/

таким образом, вы можете просто добавить еще один url в urlpatterns после того, как вы создали, и он должен соответствовать всем шаблонам url и отправлять их в представление, которое возвращает код 404.

Я.е :

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