gpt4 book ai didi

python - Django:只为 api 子应用程序返回 json

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:06 28 4
gpt4 key购买 nike

网址.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

返回 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

欢迎提出任何问题和意见。

关于python - Django:只为 api 子应用程序返回 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40620457/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com