当前位置: 首页 > 面试题库 >

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

司马昕
2023-03-14
问题内容

我是Django的新手,而Ajax的新手。我正在一个需要将两者整合的项目中。我相信我理解它们背后的原理,但是并没有找到对两者的良好解释。

有人可以给我快速解释一下如何将两者集成在一起来更改代码库吗?

例如,我仍然可以将HttpResponseAjax与一起使用,还是必须随着Ajax的使用而改变我的回答?如果是这样,请你举例说明如何更改请求的响应?如果有什么不同,我返回的数据是JSON。


问题答案:

即使这不完全符合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调用时,你将获得与前往该位置的用户相同的数据。

例如,对的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. 127.0.0.1:8000/hello就像你打开一个新标签页并自己完成一样,呼叫将转到URL 。
  2. 如果成功(状态码200),请执行成功功能,这将提醒收到的数据。
  3. 如果失败,请执行其他功能。

现在在这里会发生什么?你会收到有关“ hello world”的警报。如果你拨打AJAX回家电话怎么办?同样,你会收到警告,说明

换句话说-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要调试的东西。我不会详细解释,只是在Google周围寻找它。这将对你非常有帮助。
  5. CSRF意识。最后,请记住Django中的发布请求需要csrf_token。通过AJAX调用,很多时候你想发送数据而不刷新页面。你可能会遇到一些麻烦,最后才想起那个-等待,你忘记了发送csrf_token。这是AJAX-Django集成中已知的初学者障碍,但是当你学习了如何使其发挥出色后,就很容易了。
    这就是我想到的一切。这是一个广泛的主题,但是的,那里可能没有足够的例子。只要按照自己的方式做,就慢慢地,最终会成功。


 类似资料:
  • 问题内容: 我是Django的新手,而Ajax的新手。我正在一个需要将两者整合的项目中。我相信我理解它们背后的原理,但是并没有找到对两者的良好解释。 有人可以给我快速解释一下如何将两者集成在一起来更改代码库吗? 例如,我仍然可以将Ajax与一起使用,还是必须随着Ajax的使用而改变我的回答?如果是这样,请您举例说明如何更改请求的响应?如果有什么不同,我返回的数据是JSON。 问题答案: 即使这不完

  • 我对姜戈是个新手,对阿贾克斯也是个新手。我正在做一个项目,我需要整合这两个。我相信,我理解了它们背后的原理,但没有找到一个很好的解释两者在一起。 谁能给我一个快速的解释,代码库必须如何改变与他们两个集成在一起? 例如,我还能在Ajax中使用吗,或者我的响应必须随着Ajax的使用而改变吗?如果是,请提供一个对请求的答复必须如何改变的例子?如果有任何区别,我返回的数据是JSON。

  • 问题内容: 我正在寻找有关symfony2中有关ajax的简单教程/示例,供初学者使用? 我有这些例子: city.php:http://pastebin.com/Qm8LS5kh ajax_req.js:http://pastebin.com/UqJMad24 index.html:http://pastebin.com/H1err4Yh 如何将它们放入Symfony2应用程序中? 问题答案:

  • 我第一次尝试Drools/Guvnor,我们计划在Guvnor中进行规则创作,编译、构建并将包下载到“规则包目录”。 现在我遇到的问题是,将Drools与我们的Java应用程序集成的最佳方式是什么?选项1)构建知识代理并开始将事实插入内存以在我们的应用程序中进行规则评估。在这种情况下,Drools引擎使用与应用程序JVM相同的JVM。选项2)拥有一个构建知识代理的Drools Server,应用程

  • 我们正在开发一个应用程序,将使用CPLEX解决一个工业问题。开发了一个数学模型(文件)。我们希望直接使用该模型,而不是使用CPLEX Java API重新转录。 在我们的架构中,我们有一个专门用于检索业务数据和创建合适的文件的应用程序。原始模型和这些数据文件应发送到安装在单独机器上的CPLEX实例。 问题是允许加载和运行文件的OPLJavaAPI不提供任何API来使用远程CPLEX实例。另一方面,

  • 我收到此错误 Unicode解码器位于/select_text'utf-8'编解码器无法解码位置92的字节0xe7:无效的延续字节请求方法:POST请求URL:http://agata.pgie.ufrgs.br/select_text Django版本:2.0.1异常类型:Unicode解码错误异常值:'utf-8'编解码器无法解码位置92的字节0xe7:无效的延续字节异常位置:/home/me