网址.py
urlpatterns = patterns(
url(r'^subapp1/', include('subapp1.urls', namespace='subapp1')),
url(r'^api/', include('api.urls')),
)
发送 GET/api/invalid/url 时,返回 404 html 页面。这似乎不适合 REST API。
如何让以subapp1/开头的无效url返回404 html页面,让以api/开头的无效url返回json中的404状态码和错误信息?
是否可以将 Django 设置为根据请求 header 中的 Accept 字段返回默认响应?例如返回 404 html,如果 Accept text/html,如果 Accept application/json
欢迎任何评论。谢谢。
请您参考如下方法:
下面的代码可能会有所帮助。
来自 django.views.defaults 的源代码, http.HttpResponseNotFound(body, content_type=content_type) 应该被返回。因此,检查 request.path,如果以 /topApp/api 开头,则返回 http.HttpResponseNotFound(body, content_type='application/json'),否则,返回 default 响应。
始终,request.path 以 /topApp 开头,而不是 IP 或主机名。输入参数(参见 link )包括 request, exception, template_name=ERROR_404_TEMPLATE_NAME,在我的代码中应该由 *args, **kwargs 处理。
from django.views.defaults import page_not_found
def customized_page_not_found(request, *args, **kwargs):
if request.path.startswith('/topApp/api'):
try:
from django.http import HttpResponseNotFound
return HttpResponseNotFound( json.dumps( {'error': 'Page Not Found'} ),
content_type='application/json')
except Exception as e:
pass
# handle exception here
return page_not_found( request, *args, **kwargs)
handler404 = customized_page_not_found
欢迎提出任何问题和意见。
