校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 如何利用AJAX獲取Django后端數據詳解

如何利用AJAX獲取Django后端數據詳解

熱門標簽:北京電銷外呼系統加盟 北瀚ai電銷機器人官網手機版 小蘇云呼電話機器人 所得系統電梯怎樣主板設置外呼 地圖標注面積 儋州電話機器人 市場上的電銷機器人 佛山400電話辦理 朝陽手機外呼系統

使用Django服務網頁時,只要用戶執行導致頁面更改的操作,即使該更改僅影響頁面的一小部分,它都會將完整的HTML模板傳遞給瀏覽器。但是如果我們只想更新頁面的一部分,則不必完全重新渲染頁面-這時候就要用到AJAX了。

使用AJAX獲取Django后端數據插圖

AJAX提供了一種將GET或POST請求發送到Django視圖并接收任何返回的數據而無需刷新頁面的方法?,F代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.py
from django.http import JsonResponse

def 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,該序列將數據字典序列化并將其發送回我們的頁面,在此頁面中將通過鏈接進行處理?,F在,我們可以使用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.py
from django.http import JsonResponse
import json

def 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模塊。結果是我們通過提取發送的數據的字典?,F在,我們可以通過其鍵訪問數據。

一旦獲得了請求中的數據,我們就可以執行用戶希望啟動AJAX請求的操作。這可能是創建模型的新實例或更新現有實例。

與GET請求一樣,可以使用JsonResponse和帶有數據的字典將數據發送回頁面。這可以是新的或更新的模型對象,也可以是成功消息。

確保請求是AJAX

在大多數情況下,都會發出AJAX請求,因為我們只希望更新頁面的一部分,并且需要獲取新數據來進行更新。在頁面上下文之外,JsonResponse返回的數據本身很少使用。但是,如果我們沒有正確設置視圖,則可以在AJAX請求之外訪問數據,并且不會像我們期望的那樣將其呈現給用戶。

為了防止這種情況的發生,我們可以使用request.is_ajax()方法在視圖中添加檢查以確保該請求是AJAX請求。

# views.py
from django.http import JsonResponse

def ajax_view(request):
    if request.is_ajax():
        data = {
                'my_data':data_to_display
        }
        return JsonResponse(data)

這使用“ X-Requested-With”標頭來確定請求是否由AJAX發起。 如果嘗試通過直接在瀏覽器中鍵入URL來訪問此視圖,則會收到錯誤消息??梢韵蛞晥D中添加其他邏輯(例如重定向),以防止用戶嘗試在沒有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后端數據的文章就介紹到這了,更多相關AJAX獲取Django后端數據內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Ajax解決跨域之設置CORS響應頭實現跨域案例詳解
  • 三級聯動省市ajax的代碼
  • JSON,AJAX,Maven入門基礎
  • Ajax登錄驗證實現代碼
  • Ajax實現省市區三級聯動
  • jquery+Ajax實現簡單分頁條效果
  • Ajax 的初步實現(使用vscode+node.js+express框架)
  • JavaScript 解決ajax中parsererror錯誤案例詳解

標簽:酒泉 商丘 金融催收 寧夏 云南 龍巖 江蘇 定西

巨人網絡通訊聲明:本文標題《如何利用AJAX獲取Django后端數據詳解》,本文關鍵詞  如何,利用,AJAX,獲取,Django,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何利用AJAX獲取Django后端數據詳解》相關的同類信息!
  • 本頁收集關于如何利用AJAX獲取Django后端數據詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    麻豆高清免费国产一区| 粉嫩一区二区三区在线看| 精品伦理精品一区| 色欧美日韩亚洲| 成人黄色在线网站| 国产揄拍国内精品对白| 亚洲日本在线天堂| 亚洲一区二区三区四区的 | 欧美一级免费大片| 成人黄色a**站在线观看| va亚洲va日韩不卡在线观看| 国产在线精品一区二区不卡了| 亚洲一区二区三区中文字幕在线| 亚洲一级二级在线| 热久久免费视频| 欧美一区二区三区四区视频| 欧美三级欧美一级| 久久综合成人精品亚洲另类欧美| 欧美男人的天堂一二区| 国产麻豆一精品一av一免费 | 国产不卡在线播放| 日韩avvvv在线播放| 青青草一区二区三区| 蜜桃av一区二区在线观看| 久久国产精品第一页| 99久久精品免费精品国产| 美女视频免费一区| 欧美日韩黄色影视| 色av综合在线| 国产日产精品1区| 中文字幕中文字幕一区二区 | 91久久免费观看| 欧美本精品男人aⅴ天堂| 亚洲一区中文在线| 91视频com| 亚洲欧美日韩国产成人精品影院| 蜜桃精品在线观看| 亚洲一区二区三区影院| 国产91精品久久久久久久网曝门| 一区二区三区av电影 | 国产成人在线影院| av中文字幕不卡| 欧美精品 日韩| 欧美激情一区二区| 美女在线视频一区| 91福利国产成人精品照片| 久久久久久电影| 日韩不卡一区二区三区| 97精品电影院| 国产亚洲一区二区在线观看| 一区二区三区在线视频播放 | 欧美国产一区二区| 免费在线观看视频一区| 色哟哟国产精品免费观看| 欧美精品一区二区高清在线观看| 一区av在线播放| 成av人片一区二区| 精品粉嫩超白一线天av| 国产精品美女久久久久久久久| 日韩av网站在线观看| 欧美亚洲图片小说| 亚洲欧美日韩国产综合| 国产精品一区不卡| 久久这里只精品最新地址| 日本va欧美va精品发布| 欧美午夜宅男影院| 亚洲人亚洲人成电影网站色| 成熟亚洲日本毛茸茸凸凹| 久久九九全国免费| 国内精品伊人久久久久影院对白| 日韩一卡二卡三卡| 亚洲成av人在线观看| 91精品91久久久中77777| 亚洲欧美另类小说| 色偷偷88欧美精品久久久| 亚洲精品大片www| 91麻豆精品秘密| 亚洲欧美日韩国产成人精品影院 | 日韩天堂在线观看| 日产国产欧美视频一区精品| 欧美精品在线观看播放| 一区二区三区在线播放| 色噜噜狠狠色综合中国| 亚洲伊人色欲综合网| 欧美日韩一区三区四区| 麻豆精品一区二区三区| 久久久亚洲午夜电影| 国产精品香蕉一区二区三区| 国产精品女主播在线观看| 处破女av一区二区| 日韩美女精品在线| 欧美美女激情18p| 奇米一区二区三区| 国产欧美日韩在线视频| 91小视频免费看| 婷婷综合五月天| 精品国产乱码久久| 波多野结衣精品在线| 一区二区高清在线| 精品国产sm最大网站| 成人av在线网站| 亚洲成在线观看| 精品国产欧美一区二区| jiyouzz国产精品久久| 亚洲国产成人tv| 日韩欧美高清在线| 国产+成+人+亚洲欧洲自线| 亚洲私人影院在线观看| 欧美日韩中文字幕精品| 国产乱码精品一区二区三区忘忧草| 国产精品久久久久影院老司| 欧美日韩一区二区三区免费看| 午夜精品久久久久久久 | 懂色av一区二区在线播放| 亚洲免费伊人电影| 久久久不卡网国产精品二区| 在线观看亚洲成人| 国产一区视频导航| 亚洲国产欧美在线人成| 国产亚洲1区2区3区| 欧美精品乱码久久久久久| av在线不卡电影| 精品亚洲成av人在线观看| 亚洲黄一区二区三区| 欧美国产1区2区| 精品国产伦一区二区三区观看方式| 国产剧情在线观看一区二区| 亚洲国产精品嫩草影院| 亚洲国产成人在线| 久久蜜桃香蕉精品一区二区三区| 一本色道久久综合亚洲91| 成人一区二区三区视频在线观看 | 欧美天天综合网| 成人激情综合网站| 国产一区二区三区免费在线观看 | 国产午夜精品福利| 欧美一级夜夜爽| 欧美巨大另类极品videosbest | 国产精品资源在线看| 午夜伊人狠狠久久| 亚洲综合一二三区| 亚洲综合在线电影| 亚洲男人的天堂在线观看| 国产精品免费aⅴ片在线观看| 日韩视频免费观看高清完整版在线观看 | 欧美另类videos死尸| 欧美综合一区二区三区| 色婷婷综合久久久久中文一区二区| 成人福利视频在线看| 成人夜色视频网站在线观看| 国产精品99久久久久久久vr| 极品尤物av久久免费看| 久久精品99久久久| 国内精品免费**视频| 国产一区二区三区综合| 国产美女精品人人做人人爽| 国产精一区二区三区| 国产精品综合视频| 成人精品免费网站| 9久草视频在线视频精品| 91香蕉视频mp4| 色综合久久综合| 欧美三级资源在线| 3d成人动漫网站| 欧美一二三区在线观看| 日韩三级视频在线看| 久久先锋影音av鲁色资源网| 国产亚洲自拍一区| 亚洲图片欧美激情| 视频一区二区三区入口| 久久精品国产99国产| 成人精品国产一区二区4080| av日韩在线网站| 欧美三级一区二区| 精品国产髙清在线看国产毛片| 5858s免费视频成人| 欧美大片在线观看一区二区| 2024国产精品视频| 最新国产精品久久精品| 亚洲精品免费在线| 日韩高清在线不卡| 丁香天五香天堂综合| 欧洲av一区二区嗯嗯嗯啊| 精品视频免费在线| 久久久久久夜精品精品免费| 亚洲日韩欧美一区二区在线| 蜜臀91精品一区二区三区| 成人精品一区二区三区四区| 欧洲亚洲精品在线| 久久综合丝袜日本网| 一区二区久久久久| 国产精品一区二区久久精品爱涩| 日本电影欧美片| 精品美女在线观看| 亚洲精品视频自拍| 国产成人在线视频网站| 91国在线观看| 精品国产免费一区二区三区四区| 国产精品护士白丝一区av| 日本不卡一区二区三区|