iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么使用AJAX获取Django后端数据
  • 741
分享到

怎么使用AJAX获取Django后端数据

2023-06-15 08:06:56 741人浏览 八月长安
摘要

这篇文章主要介绍了怎么使用ajax获取Django后端数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用DjanGo服务网页时,只要用户执行导致页面更改的操作,即使该更改

这篇文章主要介绍了怎么使用ajax获取Django后端数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

使用DjanGo服务网页时,只要用户执行导致页面更改的操作,即使该更改仅影响页面的一小部分,它都会将完整的html模板传递给浏览器。但是如果我们只想更新页面的一部分,则不必完全重新渲染页面-这时候就要用到AJAX了。

使用AJAX获取Django后端数据插图

AJAX提供了一种将GET或POST请求发送到Django视图并接收任何返回的数据而无需刷新页面的方法。现代javascript包含fetch api,该API为我们提供了一种纯JavaScript方式来发送AJAX请求。

让我们看一下如何通过获取发出GET和POST请求,以在视图和模板之间传递JSON数据。

GET请求

  • 通过获取发出GET请求

通过向其提供视图的URL和适当的headers参数来进行获取GET请求。发出请求后,视图返回请求的数据,然后需要将响应转换为jsON,然后才能将其用于其他操作。

fetch(URL, {      headers:{          'Accept': 'application/json',          'X-Requested-With': 'XMLHttpRequest', //Necessary to work with request.is_ajax()      },  })  .then(response => {      return response.json() //Convert response to JSON  })  .then(data => {      //PerfORM actions with the response data from the view  })python

URL

提取将URL作为其第一个参数。根据Django项目的URLconf和视图的配置方式,URL可能包含关键字参数或查询字符串,我们希望在视图中使用该参数来选择请求的数据。

Headers

设置AJAX请求头参数。我们希望数据以JSON形式从视图返回,因此我们将Accept参数设置为application/json。在视图中,我们可能要确保该请求是AJAX请求。通过将设置为“XMLHttpRequest”的“X-Requested-With”标头包括在内,该视图将能够检查请求是否为AJAX。

get不会直接返回数据。它将返回一个response,该response将返回所请求的响应。为了从响应中获取数据,我们必须通过多次使用.then处理程序来使用链式response。第一个.then接收已解析的响应并将其转换为JSON。第二个.then允许我们访问第一个.then返回的数据,并允许我们使用它,然后可以处理这个数据,比如进行更新页面操作。

在视图中处理GET请求

我们需要一个视图来处理来自fetch调用的AJAX请求。这可以通过多种方式完成,但是最简单的方法之一就是使用基于函数的视图,该视图接受请求并返回带有请求数据的JsonResponse。

# views.pyfrom django.http import JsonResponsedef ajax_get_view(request): # May include more arguments depending on URL parameters    # Get data from the database - Ex. Model.object.get(...)    data = {            'my_data':data_to_display    }    return JsonResponse(data)

如果通过包含附加参数的URL访问该视图,则这些附加参数也将与请求一起包含在功能参数列表中。 将根据那些URL参数或查询字符串(如果使用的话)从数据库中检索数据。我们要发送回页面的数据必须在使用JsonResponse。 调用之前,请确保从django.http导入JsonResponse。

该视图将返回JsonResponse,该序列将数据字典序列化并将其发送回我们的页面,在此页面中将通过链接进行处理。现在,我们可以使用JavaScript使用GET请求中的数据来更新页面的一部分。

POST请求

通过提取发出POST请求

带GET的POST请求比GET请求需要更多的参数。

fetch(URL, {      method: 'POST',      credentials: 'same-origin',      headers:{          'Accept': 'application/json',          'X-Requested-With': 'XMLHttpRequest', //Necessary to work with request.is_ajax()          'X-CSRFToken': csrftoken,  },      body: JSON.stringify({'post_data':'Data to post'}) //JavaScript object of data to POST  })  .then(response => {        return response.json() //Convert response to JSON  })  .then(data => {  //Perform actions with the response data from the view  })

Method

默认为发出GET请求。我们必须通过添加方法“ POST”来明确地告诉它发出POST请求。

Credentials

我们需要指定如何在请求中发送凭据。凭证可能很棘手,特别是如果项目的前端和后端分别托管。如果AJAX请求是通过与后端其他位置相同的模板提供的,我们可以使用默认值“ same-origin”。这意味着,如果所请求的URL与提取调用来自同一站点,则将在请求中发送用户凭据。如果前端和后端不在某个位置,则需要使用不同的凭据设置,并且需要考虑跨域资源共享(CORS)。

Headers

“ Accept”和“ X-Requested-With”标头与GET请求的标头相同,但是现在必须包括一个附加的“ X-CSRFToken”标头。

向Django发出POST请求时,我们需要包含csrf令牌以防止跨站点请求伪造攻击。Django文档提供了我们需要添加的确切JavaScript代码,以从csrftoken cookie中获取令牌。

function getCookie(name) {      let cookieValue = null;      if (document.cookie && document.cookie !== '') {          const cookies = document.cookie.split(';');          for (let i = 0; i < cookies.length; i++) {              const cookie = cookies[i].trim();              // Does this cookie string begin with the name we want?              if (cookie.substring(0, name.length + 1) === (name + '=')) {                  cookieValue = decodeURIComponent(cookie.substring(name.length + 1));                  break;              }          }      }      return cookieValue;  }  const csrftoken = getCookie('csrftoken');

现在我们有了csrftoken,我们将其添加到标头中作为“X-CSRFToken”:csrftoken。

BODY

POST请求的目标是将数据发送到视图并更新数据库。 这意味着我们还需要在fetch调用中包含数据。 假设我们要发送JSON数据,我们添加主体:JSON.stringify(data)其中data是我们要发送的数据的JavaScript对象。 除了JSON数据(包括文件和来自表单的数据)外,其他数据也可以在正文中发送。 有关如何包含其他类型的数据的更多信息,请参见MDN文档。

我们从POST请求中获得的响应将像GET请求一样使用链式承诺进行处理。

在视图中处理POST请求

接受POST请求的视图将从请求中获取数据,对其执行一些操作,然后返回响应。

# views.pyfrom django.http import JsonResponseimport jsondef ajax_post_view(request):    data_from_post = json.load(request)['post_data'] #Get data from POST request    #Do something with the data from the POST request    #If sending data back to the view, create the data dictionary    data = {        'my_data':data_to_display,    }    return JsonResponse(data)

我们需要从AJAX请求中提取数据才能使用它。数据以JSON格式发送,因此我们需要使用json.load(request)将其加载到视图中。这需要从Python标准库中导入json模块。结果是我们通过提取发送的数据的字典。现在,我们可以通过其键访问数据。

一旦获得了请求中的数据,我们就可以执行用户希望启动AJAX请求的操作。这可能是创建模型的新实例或更新现有实例。

与GET请求一样,可以使用JsonResponse和带有数据的字典将数据发送回页面。这可以是新的或更新的模型对象,也可以是成功消息。

确保请求是AJAX

在大多数情况下,都会发出AJAX请求,因为我们只希望更新页面的一部分,并且需要获取新数据来进行更新。在页面上下文之外,JsonResponse返回的数据本身很少使用。但是,如果我们没有正确设置视图,则可以在AJAX请求之外访问数据,并且不会像我们期望的那样将其呈现给用户。

为了防止这种情况的发生,我们可以使用request.is_ajax()方法在视图中添加检查以确保该请求是AJAX请求。

# views.pyfrom django.http import JsonResponsedef ajax_view(request):    if request.is_ajax():        data = {                'my_data':data_to_display        }        return JsonResponse(data)

这使用“ X-Requested-With”标头来确定请求是否由AJAX发起。 如果尝试通过直接在浏览器中键入URL来访问此视图,则会收到错误消息。可以向视图中添加其他逻辑(例如重定向),以防止用户尝试在没有AJAX请求的情况下访问视图时看到错误。

Django 3.1及更高版本

在即将发布的Django3.1版本(2020年8月)中,request.is_ajax()将被弃用。 这意味着如果我们要检查AJAX请求,则必须自己重新创建功能。 幸运的是,Django开发人员确切地告诉我们我们需要做什么。 我们必须自己从request.is_ajax()方法重新创建逻辑,该逻辑只有1行代码:

request.headers.get('x-requested-with') == 'XMLHttpRequest'

现在,我们可以编辑视图以包括此检查:

def ajax_view(request):  if request.headers.get('x-requested-with') == 'XMLHttpRequest':    # Get requested data and create data dictionary    return JsonResponse(data))

一些重要注意事项

尽管获取是发出AJAX请求的便捷方法,但并非所有浏览器(即所有版本的InternetExplorer)都支持提取。如果需要支持IE,请查看Jquery或XMLHttpRequest来发出AJAX请求。

AJAX请求应仅限于Django项目的一小部分。如果发现自己在多个模板中使用它们来获取大量数据,请考虑使用Django Rest Framework创建API。

总结

通过在Django项目中使用AJAX请求,我们可以更改页面的某些部分而无需重新加载整个页面。提取API使添加此功能相当轻松,同时需要最少的JavaScript。正确而谨慎地使用它,可以使我们的页面感觉更快,并为用户提供更多的交互体验。

感谢你能够认真阅读完这篇文章,希望小编分享的“怎么使用AJAX获取Django后端数据”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: 怎么使用AJAX获取Django后端数据

本文链接: https://www.lsjlt.com/news/278989.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用AJAX获取Django后端数据
    这篇文章主要介绍了怎么使用AJAX获取Django后端数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用Django服务网页时,只要用户执行导致页面更改的操作,即使该更改...
    99+
    2023-06-15
  • 如何使用AJAX获取Django后端数据
    这篇文章主要介绍“如何使用AJAX获取Django后端数据”,在日常操作中,相信很多人在如何使用AJAX获取Django后端数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • 如何利用AJAX获取Django后端数据详解
    使用Django服务网页时,只要用户执行导致页面更改的操作,即使该更改仅影响页面的一小部分,它都会将完整的HTML模板传递给浏览器。但是如果我们只想更新页面的一部分,则不必完全重新渲...
    99+
    2024-04-02
  • Django中怎么利用ajax异步刷新获取数据
    今天就跟大家聊聊有关Django中怎么利用ajax异步刷新获取数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。<script>   &nb...
    99+
    2023-06-04
  • angular怎么获取数据给后端
    要将数据发送给后端,可以使用Angular的HttpClient模块。 首先,需要在项目中导入HttpClient模块。在你的mod...
    99+
    2023-10-24
    angular
  • Django怎么从request中获取前端数据
    这篇文章主要介绍Django怎么从request中获取前端数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!go适合做什么go是golang的简称,而golang可以做服务器端开发,且golang很适合做日志处理、数...
    99+
    2023-06-14
  • Django如何获取前端数据
    这篇文章主要介绍“Django如何获取前端数据”,在日常操作中,相信很多人在Django如何获取前端数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Django如何获取前端数据”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-05
  • django怎么获取post数据
    在Django中,可以通过request对象的POST属性来获取POST数据。具体步骤如下:1. 在视图函数中引入request模块...
    99+
    2023-10-11
    django
  • 使用ajax怎么动态获取数据库中的数据
    使用ajax怎么动态获取数据库中的数据?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先我这用的框架是SSM,代码就开始了:这是写在前台的方法里一个点击事件进入...
    99+
    2023-06-08
  • ajax中怎么异步获取数据
    这篇文章给大家介绍ajax中怎么异步获取数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。代码如下:<script type="text/javascript...
    99+
    2024-04-02
  • jQuery中怎么使用ajax跨域请求获取数据
    本篇文章给大家分享的是有关jQuery中怎么使用ajax跨域请求获取数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。跨域是我在日常面试中经常...
    99+
    2024-04-02
  • Django 如何从request中获取前端数据
    Django ###request 如果说 urls.py 是 Django 中前端页面和后台程序桥梁,那么 request 就是桥上负责运输的小汽车 可以说后端接收到的来至前端的信...
    99+
    2024-04-02
  • 使用ajax怎么获取json对象数组
    本篇文章为大家展示了使用ajax怎么获取json对象数组 ,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如下所示:var obj= [{id: 1, pId:...
    99+
    2023-06-08
  • Vue Element前端应用开发之获取后端数据
    目录概述1、后端数据的获取处理2、界面展示处理概述 在前面随笔《循序渐进VUE+Element 前端应用开发之动态菜单和路由的关联处理》中介绍了在Vue + Element整合框架中...
    99+
    2024-04-02
  • ajax怎么获取json数据并显示
    要使用Ajax获取JSON数据并显示,可以按照以下步骤进行操作:1. 创建一个XMLHttpRequest对象:```var xhr...
    99+
    2023-09-12
    json ajax
  • ECharts如何调用接口获取后端数据
    这篇文章主要介绍了ECharts如何调用接口获取后端数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ECharts如何调用接口获取后端数据文章都会有所收获,下面我们一起来看看吧。方法一:在mounted中使用...
    99+
    2023-07-04
  • ant design charts怎么获取后端接口数据展示
    本文小编为大家详细介绍“ant design charts怎么获取后端接口数据展示”,内容详细,步骤清晰,细节处理妥当,希望这篇“ant design charts怎么获取后端接口数据展示”文章能帮助...
    99+
    2023-06-30
  • AJAX跨域请求怎么获取JSON数据
    这篇文章主要介绍“AJAX跨域请求怎么获取JSON数据”,在日常操作中,相信很多人在AJAX跨域请求怎么获取JSON数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”AJAX...
    99+
    2024-04-02
  • JQuery怎么用$.ajax或$.getJSON跨域获取JSON数据
    这篇文章主要为大家展示了“JQuery怎么用$.ajax或$.getJSON跨域获取JSON数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JQuery怎么用...
    99+
    2024-04-02
  • ajax怎么实现前后端数据交互
    Ajax是一种用于实现前后端数据交互的技术,它可以通过异步请求在不重新加载整个页面的情况下更新部分页面内容。下面是使用Ajax实现前...
    99+
    2023-09-15
    ajax
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作