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

我是Django的新手,对Ajax也很陌生。我正在做一个项目,我需要将两者结合起来。我相信我理解这两者背后的原理,但没有找到一个很好的解释

有人能给我一个快速的解释,说明当它们两个集成在一起时,代码库必须如何变化吗

例如,我仍然可以将HttpResponse与Ajax一起使用,还是我的响应必须随着Ajax的使用而改变?如果是这样,请举例说明对请求的响应必须如何更改?如果有什么区别的话,我返回的数据就是JSON

虽然这并不完全符合我的精神,但我喜欢这个问题,因为我在开始的时候也遇到了同样的问题,所以我会给你一个快速的指导。显然,你不理解他们背后的原则(不要认为这是冒犯,但如果你理解了,你就不会问)

Django是服务器端的。这意味着,假设客户机访问URL,您在视图中有一个函数,该函数呈现他看到的内容,并以HTML返回响应。让我们把它分成几个例子:

视图。py:

def hello(请求):
返回HttpResponse('helloworld!')
def home(请求):
返回render_to_响应('index.html',{'variable':'world'})

index.html:

<h1>你好{{variable}},欢迎来到我最棒的网站&lt/h1>

url.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/你好',
键入:“get”,//这是默认设置,实际上不必总是提及它
成功:功能(数据){
警报(数据);
},
失败:函数(数据){
警报(‘有个错误,伙计’);
}
}); 

一般过程如下:

  1. 调用会转到URL127.0.0.1:8000/hello,就好像您打开了一个新选项卡并自己做了一样
  2. 如果成功(状态代码200),则执行成功功能,该功能将警告接收到的数据
  3. 如果失败,请执行其他功能

现在这里会发生什么?你会收到一个带有“hello world”的警报。如果您对主页进行AJAX调用,会发生什么?同样,您将收到一条提示,说明<h1>你好,世界,欢迎来到我的精彩网站&lt/h1&gt

换句话说,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开发者工具(或类似的工具,如firebug)和console.log进行调试。我不会详细解释,只需在谷歌上搜索一下就可以了。这对你很有帮助
  5. CSRF意识。最后,请记住Django中的post请求需要csrf\u令牌。使用AJAX调用,很多时候您希望在不刷新页面的情况下发送数据。在您最终记住之前,您可能会遇到一些麻烦-等等,您忘记发送csrf\u令牌了。这是AJAX-Django集成中已知的一个初学者障碍,但在您学习如何使其更好地发挥作用之后,就很容易了

这就是我想到的一切。这是一个广泛的主题,但是的,可能没有足够的例子。慢慢地,你最终会得到的

发表评论