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

问题:

我是Django的新手,对Ajax来说很新。我正在开展一个需要整合两个项目的项目。我相信我了解他们背后的原则,但并没有找到对两者的良好解释。
有人可以快速解释代码库必须如何变化,其中两个集成在一起?
例如,我仍然可以使用HttpResponse与Ajax,或者我的回复必须使用Ajax来改变?如果是这样,你能否提供一个例子,说明如何响应请求必须改变?如果它有任何差异,我返回的数据是JSON。

回答:

即使这并不完全属于这种精神,我也喜欢这个问题,因为当我开始时我遇到了同样的麻烦,所以我给你一个快速的指导。显然你不明白他们背后的原则(不要把它当成一个罪行,但如果你没有这样做)。
Django是服务器端的。这意味着,说一个客户端去url,你有一个内部视图中的函数,呈现他看到的内容,并在html中返回一个响应。我们来分析一下例子:
views.py

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

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

index.html的:
class=”lang-html prettyprint-override”>

<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调用将返回与您访问的相同的事情。只有这一次,你可以在一个js函数中,你可以处理它,但是你想要的。我们来看一个简单的用例:
class=”lang-javascript prettyprint-override”>

$.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. 该通话会转到url 127.0.0.1:8000/hello,就像您打开一个新的标签一样,自己做。
  2. 如果成功(状态码200),请执行成功功能,这将提醒收到的数据。
  3. 如果失败,请执行其他功能。

现在这里会发生什么?你会得到一个“hello world”的警报。如果你在家里打ajax电话会怎么样?同样的事情,你会得到一个警告,说明<h1>Hello world, welcome to my awesome site</h1>
换句话说 – 没有关于AJAX调用的新功能。它们只是让用户在不离开页面的情况下获取数据和信息的一种方式,它可以让您的网站平滑而非常整洁的设计。您应该注意的几个准则:

  1.  学习jQuery。我不能强调这一点。你必须了解一点,知道如何处理你收到的数据。您还需要了解一些基本的JavaScript语法(不远处的python,你会习惯它)。我强烈推荐Envato’s video tutorials for jQuery,他们是伟大的,将使你走上正确的道路。
  2.  何时使用JSON?。您将看到很多示例,其中Django视图发送的数据是JSON。我没有详细说明,因为how不重要(有很多解释很多),而且更重要的是when。而答案是 – JSON数据是序列化数据。也就是说,你可以操纵的数据。像我提到的一样,AJAX调用将像用户自己一样获取响应。现在说你不想混淆所有的html,而是想发送数据(也许是一个对象的列表)。 JSON对它很有好处,因为它将它作为一个对象发送(JSON数据看起来像一个python字典),然后你可以迭代它,或者做一些其他的事情,不需要筛选无用的html。
  3.  最后添加。当您构建一个网络应用程序并希望实现AJAX – 自己一个忙。首先,构建完全没有任何AJAX的整个应用程序。看到一切都正常。然后,只有这样,开始编写AJAX调用。这是一个很好的过程,可以帮助你学习很多。
  4.  使用chrome的开发工具。由于AJAX调用是在后台完成的,因此有时很难调试它们。您应该使用chrome开发工具(或类似的工具,如firebug)和console.log的东西进行调试。我不会详细解释,只是谷歌,并找出它。这对你是非常有帮助的。
  5.  CSRF意识。最后,请记住,Django中的帖子请求需要csrf_token。使用AJAX调用,很多时候您想要发送数据而不刷新页面。你可能会遇到一些麻烦,最后记住这一点 – 等等,你忘了发送csrf_token。这是AJAX-Django集成中的一个已知的初学者路障,但是在学习如何使其发挥好之后,这是很容易的。

这就是我头脑的一切。这是一个广泛的话题,但是,可能没有足够的例子。只要你的方式在那里慢慢地,你会得到它最终。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How do I integrate Ajax with Django applications?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 3