django:ajax视图结构

django:ajax视图结构,ajax,django,Ajax,Django,我想知道在django中构造ajax视图的正确方法 比如说我做了如下事情: def foo_json(request): if is_ajax(): # return JSON here 并将其作为类似“/foo/data/”的资源提供 一切都很好 但是如果我把浏览器指向“/foo/data/”。。显然,我得到了一个错误(调试),比如:app.views.foo\u json没有返回HttpResponse对象。 所以。。。我的问题是: 构建这种观点的最佳方式是什么 …

我想知道在django中构造ajax视图的正确方法

比如说我做了如下事情:

def foo_json(request):
    if is_ajax():
        # return JSON here
并将其作为类似“/foo/data/”的资源提供

一切都很好

但是如果我把浏览器指向“/foo/data/”。。显然,我得到了一个错误(调试),比如:
app.views.foo\u json没有返回HttpResponse对象。

所以。。。我的问题是:

构建这种观点的最佳方式是什么

…我应该返回HTTP响应代码吗..可能是404/405。。。还是别的什么? -不确定处理此问题的最佳方法,请提供任何建议:)

编辑:…触发此问题的用例是ajax代理视图:

def foo_proxy(request):
    if is_ajax():
        # proxy external URL
        # return resource
    else: 
        # ? do what with browser request

如果您不知道在else子句中需要什么,您确定需要If吗?为什么测试是ajax呢?为什么不直接将JSON数据返回到浏览器?

检查is_ajax有充分的理由,其中之一是它是利用跨域策略的好方法

如果是那样的话,我会退回一张支票。请注意,403与授权无关——它是一种确认,表示您已收到并理解请求,并且拒绝返回任何与您的意图完全相符的内容。您可以选择包括请求被拒绝的原因:

您可以使用status参数设置常规
HttpResponse
对象的状态,或使用
HttpResponseForbidden
子类:

return HttpResponseForbidden("Request must be a valid XMLHttpRequest")
就我个人而言,我倾向于重复使用相同的视图,为常规GET提供模板,或为ajax请求提供JSON。我不知道我是否会认为这是一个最好的实践或任何事情,它似乎只是我的项目所需要的。

好点:……但我的意思是一般的问题-有时可能是适当的-当JavaCsRIPT被禁用时保持前端的整洁……我不想总是返回任何东西,如果请求不是ajax。。。但也许我的想法是错的。。