使用 Django 的 Ajax View

标签 ajax django django-views decorator django-generic-views

我现在正在从事一个相当大的项目,其中每个 View 都应该可以通过普通请求和通过相同 url 的 ajax 请求访问。我正在寻找有关如何创建一个小框架以非常通用的方式处理此问题的想法。根据是否通过 ajax 调用 View ,它需要呈现不同的模板并返回 json 而不是 HttpResponse 对象。我想收集关于这个主题的任何想法——主要目标应该不是避免枯燥的原则,而是尽可能使代码可重用。我已经在考虑不同的选项,如通用 View 、 View 装饰器等,但我对任何事情都持开放态度。因此,请让我听听您的建议,或向我指出您知道的任何现成的片段!

最佳答案

This article似乎是关于如何处理 ajax 和常规请求的很好的教程。 request 对象有一个方法 is_ajax(),它将查找 HTTP_X_REQUESTED_WITH: XMLHttpRequest。这当然取决于发送请求的 javascript 是否正确设置了这些值。

来自文章:

from django.http import HttpResponse
from django.core import serializers
from django.shortcuts import render_to_response
from your_app.models import ExampleModel

def xhr_test(request, format):
    obj = ExampleModel.objects.all()
    if request.is_ajax():
        data = serializers.serialize('json', obj)
        return HttpResponse(data,'json')
    else:
        return render_to_response('template.html', {'obj':obj}, context=...)

或者,您可以使用 django-piston这是 Django 的 RESTful 框架。我在我的项目中使用这个模块。您可以定义资源(有点像 View ),并且根据传递给您的 url 的 mime 类型或格式,它将发出 html、xml 或 json。如果每个 View (或绝大多数)都需要以不同的格式返回,这可能是最好的方法。

关于使用 Django 的 Ajax View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4740569/

相关文章:

jQuery 模式对话框未从 iFrame 关闭

ajax - 无法让 Isotope 与 AJAX 一起使用(代码示例)

django - 尝试使用 pre_save 方法填充必填字段

在模板上呈现时,Django 子表单不显示标签

python - "The view didn' t 返回一个 HttpResponse 对象”

jquery - 为什么 $.post 方法在 IE 中不起作用?

javascript - AJAX:POST 后更新 div 类

mysql - 通过外键外部引用使用过滤器汇总子查询注释

python - 如何在 Django 中获取登录用户的用户名?

python - Django - AttributeError : 'NoneType' object has no attribute 'first_name'