AJAX和Django如何获取数据

  介绍

今天就跟大家聊聊有关AJAX和Django如何获取数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

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

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

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

<强>通过获取发出得到请求

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

获取(URL, {
  标题:{
  & # 39;接受# 39;:& # 39;应用程序/json # 39;
  & # 39;X-Requested-With& # 39;: & # 39; xmlhttprequest # 39;,//必要处理request.is_ajax ()
  },
  })
  不要犹豫(反应=比;{
  返回response.json()//将响应转换为JSON
  })
  不要犹豫(data=https://www.yisu.com/zixun/> {//执行操作的响应数据视图
  })

<>强URL

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

<强>标题

通过提取进行的AJAX请求将包含多个标头。我们希望数据以JSON形式从视图返回,因此我们将& # 39;接受# 39;标头设置为& # 39;application/JSON # 39;。在视图中,我们可能要确保该请求是AJAX请求。通过将设置为“XMLHttpRequest”的“X-Requested-With”标头包括在内,该视图将能够检查请求是否为AJAX。

提取不会直接返回数据。相反,它将返回一个承诺,该承诺将被兑现并解决所请求的响应。为了从响应中获取数据,我们必须通过多次使用区间处理程序来使用链式承诺。第一个犹豫接收已解析的响应并将其转换为JSON。第二个区间允许我们访问第一个。然后返回的数据,并允许我们使用它,但是我们想更新页面。

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

 # views.py
  django。http进口JsonResponse
  
  def ajax_get_view(请求):#可能包括更多参数>获取不同(URL, {
  方法:& # 39;文章# 39;
  凭证:& # 39;同源# 39;
  标题:{
  & # 39;接受# 39;:& # 39;应用程序/json # 39;
  & # 39;X-Requested-With& # 39;: & # 39; xmlhttprequest # 39;,//必要处理request.is_ajax ()
  & # 39;X-CSRFToken& # 39;: csrftoken,
  },
  身体:JSON.stringify ({& # 39; post_data& # 39;: & # 39;数据发布# 39;})//JavaScript对象的数据发布
  })
  不要犹豫(反应=比;{
  返回response.json()//将响应转换为JSON
  })
  不要犹豫(data=https://www.yisu.com/zixun/> {//执行操作的响应数据视图
  })

<>强方法

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

<强>凭证

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

<强>标题

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

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

函数getCookie(名字){
  让cookieValue=https://www.yisu.com/zixun/null;
  如果文档。饼干& &文档。饼干!==?{
  const饼干=document.cookie.split (“;”);
  (让我=0;我