小编典典

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

all

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

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

例如,我是否仍然可以使用HttpResponseAjax,或者我的响应是否必须随着 Ajax
的使用而改变?如果是这样,您能否举例说明对请求的响应必须如何更改?如果有什么不同,我返回的数据是 JSON。


阅读 106

收藏
2022-04-21

共1个答案

小编典典

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

Django 是 服务器端的 。这意味着,假设客户访问一个 URL,您有一个内部函数views可以呈现他所看到的内容并以 HTML
格式返回响应。让我们将其分解为示例:

视图.py:

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

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

索引.html:

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

网址.py:

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

这是最简单的用法示例。Going to127.0.0.1:8000/hello表示对函数的请求hello(),going
to127.0.0.1:8000/home将返回index.html并替换所要求的所有变量(您现在可能已经知道所有这些了)。

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

例如,AJAX 调用127.0.0.1:8000/hello将返回与您访问它时相同的内容。只是这一次,你将它放在一个 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. 调用转到 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 的 jQuery 视频教程,它们很棒,会让你走上正确的道路。
  2. 何时使用 JSON?. 您将看到很多示例,其中 Django 视图发送的数据是 JSON 格式。我没有详细说明,因为 如何 去做并不重要(有很多解释),更重要的是 when . 答案是——JSON 数据是序列化数据。也就是说,您可以操作的数据。就像我提到的,AJAX 调用将获取响应,就好像用户自己做的一样。现在说你不想弄乱所有的 html,而是想发送数据(也许是对象列表)。JSON 对此有好处,因为它将它作为一个对象发送(JSON 数据看起来像一个 python 字典),然后您可以对其进行迭代或执行其他操作,从而无需筛选无用的 html。
  3. 最后添加 。当您构建一个 Web 应用程序并想要实现 AJAX 时,请帮自己一个忙。首先,构建完全没有任何 AJAX 的整个应用程序。看到一切正常。然后,只有这样,才开始编写 AJAX 调用。这是一个很好的过程,也可以帮助你学到很多东西。
  4. 使用 chrome 的开发者工具 。由于 AJAX 调用是在后台完成的,因此有时很难调试它们。您应该使用 chrome 开发人员工具(或类似的工具,例如 firebug)和console.log东西来调试。我不会详细解释,只是谷歌搜索并了解它。这对你很有帮助。
  5. CSRF 意识 。最后,请记住 Django 中的 post 请求需要csrf_token. 使用 AJAX 调用,很多时候您希望在不刷新页面的情况下发送数据。在你最终记住之前你可能会遇到一些麻烦 - 等等,你忘记发送csrf_token. 这是 AJAX-Django 集成中已知的初学者障碍,但是在您学会如何让它变得更好之后,它就像馅饼一样容易。

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

2022-04-21