今天就跟大家聊聊有关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;我AJAX和Django如何获取数据