我想知道在django中构造ajax视图的正确方法。
说我做的事情如下:
def foo_json(request):
if is_ajax():
# return JSON here
并将其作为资源提供,例如'/ foo / data /'...
一切都很好..
但如果我将浏览器指向'/ foo / data /'..显然我收到错误(调试),如:app.views.foo_json didn't return an HttpResponse object.
所以...我的问题是:
这种观点最好的结构是什么?
..我应该返回HTTP响应代码..可能是404/405 ......还是其他什么? - 不确定处理此问题的最佳方法,任何建议表示赞赏:)
编辑:..触发此问题的用例是ajax PROXY视图:
def foo_proxy(request):
if is_ajax():
# proxy external URL
# return resource
else:
# ? do what with browser request
答案 0 :(得分:2)
检查is_ajax有正当理由,因为这是利用跨域策略的好方法。
在这种情况下,我会返回403 - Forbidden。请注意,403与授权无关 - 它是对您已收到并理解该请求的确认,并且拒绝返回任何与您的意图完全匹配的内容。您可以选择包括拒绝请求的原因:
您可以使用status参数设置常规HttpResponse
对象的状态,或使用HttpResponseForbidden
子类:
return HttpResponseForbidden("Request must be a valid XMLHttpRequest")
就个人而言,我倾向于重复使用相同的视图来为常规GET提供模板,或者为ajax请求提供JSON。我不知道我是否认为这是一种最佳做法或任何事情,它似乎只是我的项目所需要的。
答案 1 :(得分:0)
如果你在else子句中不知道你想要什么,你确定你需要if吗?为什么要测试is_ajax?为什么不直接将JSON数据返回给浏览器?