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

标签 python ajax django

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

有人可以快速解释一下代码库必须如何随着它们两个集成在一起而改变吗?

例如,我还能使用HttpResponse吗?使用 Ajax,还是我的响应必须随着 Ajax 的使用而改变?如果是这样,您能否举例说明对请求的响应必须如何改变?如果它有任何区别,我返回的数据是 JSON。

最佳答案

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

姜戈是 服务器端 .这意味着,假设一个客户端访问一个 URL,你在 views 中有一个函数。呈现他看到的内容并以 HTML 格式返回响应。让我们把它分成几个例子:

View .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');
    }
}); 

一般流程是这样的:
  • 调用转到 URL 127.0.0.1:8000/hello就像您打开一个新标签并自己完成一样。
  • 如果成功(状态码200),执行成功函数,会提示收到的数据。
  • 如果失败,请执行不同的功能。

  • 现在这里会发生什么?您会收到带有“hello world”的警报。如果您使用 AJAX 调用 home 会发生什么?同样的事情,你会收到一条警告,说明 <h1>Hello world, welcome to my awesome site</h1> .

    换句话说 - AJAX 调用并没有什么新鲜事。它们只是让用户无需离开页面即可获取数据和信息的一种方式,它使您的网站设计流畅且非常整洁。您应该注意的一些准则:
  • 学习jQuery .我怎么强调这一点都不为过。您必须稍微了解它才能知道如何处理您收到的数据。您还需要了解一些基本的 JavaScript 语法(距离 Python 不远,您会习惯的)。我强烈推荐 Envato's video tutorials for jQuery ,他们很棒,会让你走上正确的道路。
  • 何时使用 JSON? .您将看到很多示例,其中 Django View 发送的数据采用 JSON 格式。我没有详细说明,因为如何去做并不重要(有很多解释比比皆是),更重要的是什么时候做。答案是 - JSON 数据是序列化数据。也就是说,您可以操作的数据。就像我提到的,AJAX 调用将获取响应,就像用户自己做的一样。现在说你不想弄乱所有的 html,而是想发送数据(也许是一个对象列表)。 JSON 对此很有用,因为它将它作为对象发送(JSON 数据看起来像 Python 字典),然后您可以对其进行迭代或执行其他操作,从而无需筛选无用的 html。
  • 最后添加 .当您构建 Web 应用程序并想要实现 AJAX 时 - 帮自己一个忙。首先,构建完全没有任何 AJAX 的整个应用程序。看到一切正常。然后,并且只有在那时,才开始编写 AJAX 调用。这是一个很好的过程,也可以帮助您学到很多东西。
  • 使用 chrome 的开发者工具 .由于 AJAX 调用是在后台完成的,因此有时很难调试它们。您应该使用 chrome 开发人员工具(或类似的工具,例如 firebug)和 console.log要调试的东西。我不会详细解释,只是谷歌搜索并了解它。这对你会很有帮助。
  • CSRF 意识 .最后,记住 Django 中的 post 请求需要 csrf_token .对于 AJAX 调用,很多时候您希望在不刷新页面的情况下发送数据。在您最终记住之前,您可能会遇到一些麻烦 - 等等,您忘记发送 csrf_token .这是 AJAX-Django 集成中一个众所周知的初学者障碍,但是在您学会如何让它玩得更好之后,它就像馅饼一样简单。

  • 这就是我想到的一切。这是一个庞大的主题,但是是的,可能没有足够的例子。只要按照自己的方式工作,慢慢地,你最终会得到它。

    关于python - 如何将 Ajax 与 Django 应用程序集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306981/

    相关文章:

    python - 如何使用list_objects_v2从S3获取超过1000个对象?

    javascript - 如何将SQL返回数组修改为值并返回给前端?

    多重继承中的 python 'super' - 意外的代码输出

    python - 如何中断 Python 中的命令执行?

    javascript - 选择更改后 Jquery 删除行成功 Ajax 调用

    javascript - 通过 JQuery AJAX 请求向下拉列表添加选项(作为 json 对象)

    python - Django UUIDField 默认值

    python - Daphne,安装 django channel 时出现扭曲的 pip 错误

    javascript - 如何正确设置附加到按钮的日期选择器

    Python - 从 aspx 表单下载文件