2016-03-15 83 views
2

的Django 1.7Django Rest Framework如何返回所有无效URL上未找到的细节?

DRF 3.3.2

的Python 2.7

我想,每当我输入的网址无效返回与{'detail': 'Not found'.} 404响应。

但是,只有当我输入有效的URL与无效的查找参数时,我才得到这个。

举例来说,如果我做一个GET请求:

http://127.0.0.1:8000/api/boxes/3e1659f3-9238-4b8f-a580-9b096d95bbfa/

我会得到所请求的对象。

如果我做同样的事情:

http://127.0.0.1:8000/api/boxes/3e1659f3-9238-4b8f-a580-9b096d95bbfajibbersihherelalalalalalala/

我会在身体404 {'detail': 'Not found'.}消息。

如果我尝试这个网址同样的事情:

http://127.0.0.1:8000/api/boxesevenbiggerjibberish

我会得到一个404,此错误:

enter image description here

这将打破我的应用程序。

所以问题是,我如何设置我的网址,以便每个无效的网址都通过{'detail': 'Not found'.}消息处理(这不会中断我的应用程序)。

UPDATE

给出的答案会为您的整个项目(所有AP)的自定义的404视图。

如果您想为项目内的特定应用程序设置自定义404(例如,您希望您的API返回json,但您希望应用程序返回一些自定义模板),那么您可以设置一个urlpattern以捕获一切:

的myapp/urls.py

urlpatterns = [ 
    ..., 
    ..., 
    url(r'^.*/$', views.error_page, name='error_page') 
] 

确保网址是最后的模式(否则每个URL将调用您的自定义error_page视图)。

回答

2

您可以编写自定义404视图并将其分配给django的handler404。这看起来是这样的(未测试):

urls.py

from django.conf.urls import handler404 
from myapp import views 

handler404 = views.error_page 

views.py

from rest_framework.decorators import api_view 
from rest_framework import status 

@api_view() 
def error_page(request): 
    return Response({'detail': 'Not found'}, status=status.HTTP_404_NOT_FOUND) 
+0

@BoldMarshmallow,为什么你认为'api_view'将无法正常工作? – ilse2005

+0

我很抱歉,它确实有效。昨天出于某种原因,它破坏了我的代码,但现在我再次检查它,一切似乎都很好。我一定在其他地方犯了一个错误。 –

相关问题