Django 1.7
DRF 3.3.2
python 2.7
每当我输入无效的 url 时,我都想返回带有 {'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'.} 消息。
如果我用这个 url 尝试同样的事情:
http://127.0.0.1:8000/api/boxesevenbiggerjibberish
我会得到一个 404 错误:
这会破坏我的应用程序。
所以问题是,我如何设置我的 url,以便每个无效的 url 都用 {'detail': 'Not found'.} 消息处理(这不会破坏我的应用程序)。
更新
给定的答案将为您的整个项目(所有 aps)设置自定义 404 View 。
如果您想为项目中的特定应用程序设置自定义 404,(例如,您希望 API 返回 json,但您希望应用程序返回一些自定义模板),那么您可以设置一个 urlpattern 来捕获所有内容:
我的应用程序/urls.py
urlpatterns = [
...,
...,
url(r'^.*/$', views.error_page, name='error_page')
]
确保 url 是最后一个模式(否则每个 url 都会调用您的自定义 error_page View )。
请您参考如下方法:
你可以编写自定义 404 View 并将其分配给 django 的 handler404 .这可能看起来像这样(未经测试):
网址.py
from django.conf.urls import handler404
from myapp import views
handler404 = views.error_page
View .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)
