Django 1.7
DRF 3.3.2
Python 2.7
每当我输入无效网址时,我都希望使用{'detail': 'Not found'.}
返回404回复。
但是,只有当我输入一个包含无效查找参数的有效网址时,我才会收到此信息。
例如,如果我发出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/
我会在正文中收到带有{'detail': 'Not found'.}
消息的404。
如果我对这个网址尝试相同的事情:
http://127.0.0.1:8000/api/boxesevenbiggerjibberish
我会收到404错误:
会破坏我的应用。
所以问题是,如何设置我的网址,以便使用{'detail': 'Not found'.}
消息处理每个无效网址(这不会破坏我的应用)。
更新
给定答案将为整个项目设置自定义404视图(所有aps)。
如果要为项目中的特定应用设置自定义404,(例如,您希望API返回json,但您希望应用返回一些自定义模板),那么您可以设置urlpattern来捕获所有内容:
的myapp / urls.py
urlpatterns = [
...,
...,
url(r'^.*/$', views.error_page, name='error_page')
]
确保网址是最后一个模式(否则每个网址都会调用您的自定义error_page视图)。
答案 0 :(得分:2)
您可以编写自定义404视图并将其分配给django' s 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)