django:ajax视图结构

时间:2010-06-08 18:18:12

标签: ajax django

我想知道在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

2 个答案:

答案 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数据返回给浏览器?