Skip to main content
 首页 » 编程设计

python之Django Rest Framework 如何返回在所有无效网址上找不到的详细信息

2024年08月23日29傻小

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)