提问者:小点点

如何将Ajax与Django应用程序集成?


我对姜戈是个新手,对阿贾克斯也是个新手。我正在做一个项目,我需要整合这两个。我相信,我理解了它们背后的原理,但没有找到一个很好的解释两者在一起。

谁能给我一个快速的解释,代码库必须如何改变与他们两个集成在一起?

例如,我还能在Ajax中使用HttpResponse吗,或者我的响应必须随着Ajax的使用而改变吗?如果是,请提供一个对请求的答复必须如何改变的例子?如果有任何区别,我返回的数据是JSON。


共1个答案

匿名用户

即使这不是完全在SO精神,我喜欢这个问题,因为我有同样的麻烦当我开始,所以我给你一个快速的指导。很明显,你不了解它们背后的原则(不要把它当作是一种冒犯,但如果你了解了,你就不会问了)。

Django是服务器端的。这意味着,假设客户机转到一个URL,您在views中有一个函数,它呈现他看到的内容,并以HTML形式返回响应。下面我们将其分解为示例:

views.py:

def hello(request):
    return HttpResponse('Hello World!')

def home(request):
    return render_to_response('index.html', {'variable': 'world'})

index.html:

<h1>Hello {{ variable }}, welcome to my awesome site</h1>

urls.py:

url(r'^hello/', 'myapp.views.hello'),
url(r'^home/', 'myapp.views.home'),

这是最简单用法的一个例子。转到127.0.0.1:8000/hello意味着对hello()函数的请求,转到127.0.0.1:8000/home将返回index.html并按要求替换所有变量(您现在可能已经知道了这一切)。

现在我们来谈谈Ajax。AJAX调用是执行异步请求的客户端代码。这听起来很复杂,但它仅仅意味着它在后台为您执行一个请求,然后处理响应。因此,当您对某个URL进行AJAX调用时,您得到的数据与用户访问该位置时得到的数据相同。

例如,对127.0.0.1:8000/hello的AJAX调用将返回与您访问时相同的内容。只是这一次,您将它放在JavaScript函数中,您可以任意处理它。让我们来看一个简单的用例:

$.ajax({
    url: '127.0.0.1:8000/hello',
    type: 'get', // This is the default though, you don't actually need to always mention it
    success: function(data) {
        alert(data);
    },
    failure: function(data) { 
        alert('Got an error dude');
    }
}); 

大致流程是这样的:

  1. 呼叫转到URL127.0.0.1:8000/hello,就像您打开了一个新选项卡并自己完成一样。
  2. 如果成功(状态代码200),执行成功函数,该函数将对收到的数据发出警报。
  3. 如果失败,请执行其他函数。

现在这里会发生什么?你会收到一个带有“你好世界”的警报。如果对主页执行AJAX调用会发生什么情况?同样,您将得到一个提示,说明

hello world,欢迎来到我的超棒站点

换句话说--AJAX调用并没有什么新的东西。它们只是一种让用户在不离开页面的情况下获得数据和信息的方式,它使您的网站设计流畅,非常整洁。您应该注意以下几个指导原则:

  1. 学习jQuery。我再怎么强调也不为过。你需要稍微理解一下,才能知道如何处理你收到的数据。您还需要理解一些基本的JavaScript语法(离python不远,您会习惯的)。我强烈推荐Envato的jQuery视频教程,它们很棒,会让您走上正确的道路。
  2. 何时使用JSON?。您将看到许多Django视图发送的数据是在JSON中的示例。我没有详述这一点,因为如何做并不重要(有很多解释),更重要的是什么时候做。答案是-JSON数据是序列化数据。即您可以操作的数据。就像我提到的,AJAX调用将获取响应,就像用户自己做的那样。现在假设您不想弄乱所有的html,而是想发送数据(也许是一个对象列表)。JSON在这方面很好,因为它将其作为一个对象发送(JSON数据看起来像一个python字典),然后您可以对其进行迭代或执行其他操作,以消除筛选无用HTML的需要。
  3. 最后添加。当您构建一个web应用程序并希望实现AJAX时-帮自己一个忙。首先,构建完全没有任何Ajax的整个应用程序。确保一切正常工作。然后开始编写AJAX调用。这是一个很好的过程,可以帮助你学到很多东西。
  4. 使用Chrome的开发者工具。由于AJAX调用是在后台完成的,因此有时很难调试它们。您应该使用chrome developer工具(或类似的工具,如firebug)和console.log来调试。我就不详细解释了,随便谷歌一下了解一下就行了。这对你很有帮助。
  5. CSRF意识。最后,请记住,Django中的post请求需要csrf_token。对于AJAX调用,很多时候您希望在不刷新页面的情况下发送数据。在最终记住这一点之前,您可能会遇到一些麻烦--等等,您忘记发送csrf_token。这是AJAX-Django集成初学者的一个众所周知的障碍,但是在学习了如何使其更好地运行之后,就很容易了。

这就是我想到的一切。这是一个很大的主题,但是的,可能没有足够的例子在那里。只要你努力,慢慢地,你最终会得到它的。