精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用AJAX獲取Django后端數據

開發 前端
讓我們看一下如何通過獲取發出GET和POST請求,以在視圖和模板之間傳遞JSON數據。

[[395869]]

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

AJAX提供了一種將GET或POST請求發送到Django視圖并接收任何返回的數據而無需刷新頁面的方法。現代JavaScript包含fetch API,該API為我們提供了一種純JavaScript方式來發送AJAX請求。

讓我們看一下如何通過獲取發出GET和POST請求,以在視圖和模板之間傳遞JSON數據。

GET請求

  •  通過獲取發出GET請求

通過向其提供視圖的URL和適當的headers參數來進行獲取GET請求。發出請求后,視圖返回請求的數據,然后需要將響應轉換為JSON,然后才能將其用于其他操作。 

  1. fetch(URL, {  
  2.       headers:{  
  3.           'Accept': 'application/json',  
  4.           'X-Requested-With': 'XMLHttpRequest', //Necessary to work with request.is_ajax()  
  5.       },  
  6.   })  
  7.   .then(response => {  
  8.       return response.json() //Convert response to JSON  
  9.   })  
  10.   .then(data => {  
  11.       //Perform actions with the response data from the view  
  12.   }) 

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。 

  1. # views.py  
  2. from django.http import JsonResponse  
  3. def ajax_get_view(request): # May include more arguments depending on URL parameters  
  4.     # Get data from the database - Ex. Model.object.get(...)  
  5.     data = {  
  6.             'my_data':data_to_display  
  7.     }  
  8.     return JsonResponse(data) 

如果通過包含附加參數的URL訪問該視圖,則這些附加參數也將與請求一起包含在功能參數列表中。將根據那些URL參數或查詢字符串(如果使用的話)從數據庫中檢索數據。我們要發送回頁面的數據必須在使用JsonResponse。調用之前,請確保從django.http導入JsonResponse。

該視圖將返回JsonResponse,該序列將數據字典序列化并將其發送回我們的頁面,在此頁面中將通過鏈接進行處理。現在,我們可以使用JavaScript使用GET請求中的數據來更新頁面的一部分。

POST請求

  •  通過提取發出POST請求

帶GET的POST請求比GET請求需要更多的參數。 

  1. fetch(URL, {  
  2.       method: 'POST',  
  3.       credentials: 'same-origin',  
  4.       headers:{  
  5.           'Accept': 'application/json',  
  6.           'X-Requested-With': 'XMLHttpRequest', //Necessary to work with request.is_ajax()  
  7.           'X-CSRFToken': csrftoken,  
  8.   },  
  9.       body: JSON.stringify({'post_data':'Data to post'}) //JavaScript object of data to POST  
  10.   })  
  11.   .then(response => {  
  12.         return response.json() //Convert response to JSON  
  13.   }) 
  14.   .then(data => {  
  15.   //Perform actions with the response data from the view  
  16.   }) 

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中獲取令牌。 

  1. function getCookie(name) {  
  2.       let cookieValue = null 
  3.       if (document.cookie && document.cookie !== '') {  
  4.           const cookies = document.cookie.split(';');  
  5.           for (let i = 0; i < cookies.length; i++) {  
  6.               const cookie = cookies[i].trim();  
  7.               // Does this cookie string begin with the name we want?  
  8.               if (cookie.substring(0, name.length + 1) === (name + '=')) {  
  9.                   cookieValue = decodeURIComponent(cookie.substring(name.length + 1));  
  10.                   break;  
  11.               }  
  12.           }  
  13.       }  
  14.       return cookieValue;  
  15.   } 
  16.    const csrftoken = getCookie('csrftoken'); 

現在我們有了csrftoken,我們將其添加到標頭中作為“X-CSRFToken”:csrftoken。

BODY

POST請求的目標是將數據發送到視圖并更新數據庫。這意味著我們還需要在fetch調用中包含數據。假設我們要發送JSON數據,我們添加主體:JSON.stringify(data)其中data是我們要發送的數據的JavaScript對象。除了JSON數據(包括文件和來自表單的數據)外,其他數據也可以在正文中發送。有關如何包含其他類型的數據的更多信息,請參見MDN文檔。

我們從POST請求中獲得的響應將像GET請求一樣使用鏈式承諾進行處理。

在視圖中處理POST請求

接受POST請求的視圖將從請求中獲取數據,對其執行一些操作,然后返回響應。 

  1. # views.py  
  2. from django.http import JsonResponse  
  3. import json  
  4. def ajax_post_view(request):  
  5.     data_from_post = json.load(request)['post_data'] #Get data from POST request  
  6.     #Do something with the data from the POST request  
  7.     #If sending data back to the view, create the data dictionary  
  8.     data = {  
  9.         'my_data':data_to_display,  
  10.     }  
  11.     return JsonResponse(data) 

我們需要從AJAX請求中提取數據才能使用它。數據以JSON格式發送,因此我們需要使用json.load(request)將其加載到視圖中。這需要從Python標準庫中導入json模塊。結果是我們通過提取發送的數據的字典。現在,我們可以通過其鍵訪問數據。

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

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

確保請求是AJAX

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

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

  1. # views.py  
  2. from django.http import JsonResponse  
  3. def ajax_view(request):  
  4.     if request.is_ajax():  
  5.         data = {  
  6.                 'my_data':data_to_display  
  7.         }  
  8.         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行代碼:

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

現在,我們可以編輯視圖以包括此檢查: 

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

一些重要注意事項

盡管獲取是發出AJAX請求的便捷方法,但并非所有瀏覽器(即所有版本的InternetExplorer)都支持提取。如果需要支持IE,請查看jQuery或XMLHttpRequest來發出AJAX請求。

AJAX請求應僅限于Django項目的一小部分。如果發現自己在多個模板中使用它們來獲取大量數據,請考慮使用Django Rest Framework創建API。

總結

通過在Django項目中使用AJAX請求,我們可以更改頁面的某些部分而無需重新加載整個頁面。提取API使添加此功能相當輕松,同時需要最少的JavaScript。正確而謹慎地使用它,可以使我們的頁面感覺更快,并為用戶提供更多的交互體驗。 

 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2021-09-03 07:39:44

數據交互AxiosAjax

2017-10-11 18:17:06

大數據數據可視化前后端

2023-10-31 16:46:45

2021-09-18 10:24:08

DjangoRedis緩存后端

2009-05-20 14:49:16

ibmdwAjaxWeb開發

2011-01-24 13:20:49

2022-09-01 07:18:21

分離項目Vue

2012-04-19 10:04:20

ibmdw

2011-10-28 14:01:30

jQuery

2013-01-15 11:22:29

AjaxASP.NET

2024-10-31 13:56:30

FastAPIGradioDjango

2021-06-09 09:36:18

DjangoElasticSearLinux

2011-06-16 14:08:20

JSONAjax

2021-11-16 10:45:35

WebSocketWebShellLinux

2015-12-25 16:37:02

RxJava數據源數據

2015-07-16 15:20:58

DockerDjango

2024-06-07 09:30:22

vue2Vuex存儲

2021-12-08 09:59:02

Django 4.0哈希器Redis緩存

2012-09-28 10:18:53

IBMdw

2009-07-27 09:07:04

Profile SerASP.NET AJA
點贊
收藏

51CTO技術棧公眾號

伊人成综合网伊人222| 91白丝在线| 国产一区 二区 三区一级| 欧美另类在线播放| 美国黄色a级片| 国产精品第一国产精品| 一区二区三区免费| 欧美精品与人动性物交免费看| 337p粉嫩色噜噜噜大肥臀| 天天久久综合| 亚洲精品少妇网址| 亚洲综合20p| 蜜桃视频在线观看播放| 中文字幕在线不卡国产视频| 国产精品自拍首页| 国产精品视频久久久久久| 亚洲精选成人| 久久久久www| 欧美特黄一区二区三区| 欧美国产亚洲精品| 在线视频欧美区| 日韩精品视频在线观看视频| av福利精品| 91视视频在线观看入口直接观看www | 青春有你2免费观看完整版在线播放高清 | 一区二区日韩视频| 国产亚洲精品自拍| 欧美日韩国产91| 日韩av片在线| 亚洲精品进入| 亚洲国产毛片完整版| 中文字幕第一页在线视频| 忘忧草在线影院两性视频| 亚洲欧美日韩国产一区二区三区| 日本一区二区三区四区高清视频| 囯产精品久久久久久| 国内不卡的二区三区中文字幕| 日韩av理论片| 99热只有这里有精品| 欧美午夜电影在线观看| 久久视频在线视频| 少妇视频一区二区| 欧美一区二区性| 日韩精品免费观看| 亚洲av成人无码一二三在线观看| 日本高清精品| 日韩写真欧美这视频| 最新中文字幕免费视频| 成人做爰免费视频免费看| 色综合久久中文综合久久97| 国产伦精品一区二区三区四区视频_| 伊人影院在线视频| 亚洲女同一区二区| 大桥未久一区二区| 久久综合网导航| ...av二区三区久久精品| 一本色道婷婷久久欧美| 香蕉视频网站在线观看| 国产精品高清亚洲| 亚洲自拍三区| 国产cdts系列另类在线观看| 成人免费在线视频观看| 美女黄色片网站| 成人影院在线看| 亚洲精品国产无套在线观| 免费日韩在线观看| 免费男女羞羞的视频网站在线观看| 亚洲美女在线国产| 国产制服91一区二区三区制服| 在线观看三级视频| 亚洲国产美女搞黄色| xxxx18hd亚洲hd捆绑| 悠悠资源网亚洲青| 91福利视频网站| 一女二男3p波多野结衣| 日韩精品一区二区三区中文字幕| 日韩三级.com| 黄色a一级视频| 精品国产99| 久久精品色欧美aⅴ一区二区| 国产av无码专区亚洲av毛网站| 午夜天堂精品久久久久| 午夜精品在线视频| 国产在线观看第一页| 精品亚洲免费视频| 激情小说综合网| 国产小视频福利在线| 1024精品合集| 精品视频免费在线播放| 欧美xnxx| 精品国产免费一区二区三区香蕉| 一级国产黄色片| 日本欧美国产| 久久久在线观看| 日韩三级一区二区| 国产一区二区三区精品视频| 国产伦精品一区二区三区免 | av一区二区不卡| 翔田千里亚洲一二三区| 日本一级理论片在线大全| 欧美日韩亚洲一区二| 欧美日韩一区二区三区69堂| 成人av影音| 最近2019年手机中文字幕| 久久久www成人免费毛片| 久久久亚洲人| 91手机在线观看| 成在在线免费视频| 午夜av区久久| 三日本三级少妇三级99| 自拍亚洲一区| 欧美极品少妇与黑人| 成人午夜精品视频| 成人深夜视频在线观看| 一区二区不卡视频| 在线看片国产福利你懂的| 91精品国产综合久久久久久久 | 国产精品九色蝌蚪自拍| 黄色一级片播放| 亚洲1区在线| 中文字幕国产精品久久| 九九热在线视频播放| 国内久久婷婷综合| 日韩精品伦理第一区| 久久影院午夜精品| 日韩免费观看高清完整版| 久久日免费视频| 久久精品亚洲一区二区| 国产精品一区二区欧美黑人喷潮水| 日本不卡在线| 在线亚洲免费视频| 欧美亚一区二区三区| 在线观看视频免费一区二区三区| 91久久精品美女高潮| av免费观看一区二区| 欧美性猛交xxxx黑人| 国产伦理在线观看| 欧美成人嫩草网站| 91麻豆国产语对白在线观看| av在线免费观看网| 日本精品视频一区二区| 色欲av无码一区二区三区| 亚洲激情网站| 国产免费一区二区| 丁香高清在线观看完整电影视频 | 无码精品黑人一区二区三区| 一级日本不卡的影视| 性鲍视频在线观看| 中文无码久久精品| 91精品国产综合久久久久久丝袜| 久久bbxx| 欧美一级片在线| 清纯粉嫩极品夜夜嗨av| 国产美女在线精品| 成人毛片100部免费看| av不卡一区| 欧美激情亚洲综合一区| 丰满人妻一区二区三区免费| 亚洲aⅴ怡春院| 影音先锋人妻啪啪av资源网站| 亚洲精选一区| 欧美精品人人做人人爱视频| 天天免费亚洲黑人免费| 一区二区三区 在线观看视| 中国a一片一级一片| 国产精品麻豆欧美日韩ww| 91福利免费观看| 欧美女激情福利| 精品国产乱码久久久久软件| 中日韩脚交footjobhd| 亚洲网站在线播放| 一区二区三区黄色片| 亚洲欧美欧美一区二区三区| 一个人看的视频www| 亚洲激情网站| 性欧美大战久久久久久久免费观看| 日本在线一区二区| 欧美日韩国产成人高清视频| 色综合免费视频| 欧美三级在线视频| 免看一级a毛片一片成人不卡| 99久久99久久精品免费看蜜桃 | 老司机成人影院| 色婷婷综合久久久久中文字幕1| aaa一区二区三区| 岛国av在线不卡| 亚洲熟女少妇一区二区| 成人av资源在线观看| 国产男女激情视频| 我不卡神马影院| 久久精品人成| 欧美aaaaaa| 91国语精品自产拍在线观看性色 | 色天堂在线视频| 日韩大片b站免费观看直播| 亚洲成av人综合在线观看| 亚洲一级中文字幕| 国产在线精品视频| 九色自拍视频在线观看| 精品久久网站| 91久色国产| 午夜日韩成人影院| 久久99久久久久久久噜噜| 免费一级在线观看播放网址| 欧美精品vⅰdeose4hd| 日韩欧美国产亚洲| 中文字幕一区二区三区色视频| 久久久午夜精品福利内容| 日本va欧美va精品| 精品人妻少妇一区二区| 99欧美视频| 久久精品午夜一区二区福利| 国产剧情一区二区在线观看| 茄子视频成人在线| 久久久久黄久久免费漫画| 日韩在线观看高清| 国产视频福利在线| 日韩av在线免费观看一区| 国产成人a人亚洲精品无码| 色视频欧美一区二区三区| 国产亚洲精品成人| 亚洲视频综合在线| 亚洲一二三四视频| 久久久久久久国产精品影院| 亚洲一区二区三区黄色| 国产一区中文字幕| 国产一区二区在线免费播放| 午夜亚洲福利在线老司机| 国产av熟女一区二区三区| 围产精品久久久久久久| 五月天婷亚洲天综合网鲁鲁鲁| 天堂网av成人| 国内不卡一区二区三区| 91精品国产自产精品男人的天堂| 91精品国产综合久久香蕉的用户体验| 桃子视频成人app| 久久久欧美一区二区| 性xxxxfjsxxxxx欧美| 欧美成人精品激情在线观看| 精品孕妇一区二区三区| 色婷婷综合久久久久| 日本中文字幕在线播放| 尤物99国产成人精品视频| 日本一级在线观看| 亚洲精品一区二区网址| 日韩二区三区| 亚洲欧美制服丝袜| 激情小说 在线视频| 亚洲欧美色婷婷| 精品成人一区二区三区免费视频| 亚洲美女久久久| 美州a亚洲一视本频v色道| 精品伊人久久97| 九色蝌蚪在线| 在线免费观看羞羞视频一区二区| se在线电影| 日韩视频一区在线| 国产激情在线视频| 欧美激情在线播放| av影院在线免费观看| 欧美一区二三区| 性欧美1819sex性高清| 国产精品久久久一区| 成人黄色在线| 成人网址在线观看| 视频一区在线| 韩国成人一区| 在线日韩网站| 艳色歌舞团一区二区三区| 91超碰成人| 久草视频国产在线| 欧美亚洲免费| 最新国产黄色网址| 成人激情小说网站| 青青草福利视频| 中文字幕一区二区三区四区不卡| 欧美日韩精品在线观看视频| 图片区小说区国产精品视频| 国产精品久久久久久人| 欧美精品一二三| 肥臀熟女一区二区三区| 亚洲人成在线一二| 国内外激情在线| 久久免费国产精品1| 国产日韩电影| 亚洲在线免费看| 亚洲区小说区图片区qvod按摩| 亚洲国产精品一区二区第一页 | 水蜜桃在线免费观看| 在线午夜精品| 久久久久久久久久一区| 成人av影院在线| 久操视频在线观看免费| 亚洲精品视频自拍| 亚洲 日本 欧美 中文幕| 欧美一区二区三区四区视频| 日本一区高清| 欧美大片免费观看| 亚洲爱爱视频| 国产精品一区二区免费看| 日韩欧美视频在线播放| www插插插无码视频网站| 精品综合免费视频观看| 日本黄色动态图| 国产精品灌醉下药二区| 中文字幕超碰在线| 日韩欧美国产一区在线观看| 国产爆初菊在线观看免费视频网站 | 欧美视频专区一二在线观看| 99在线观看精品视频| 伊人久久久久久久久久久| 菠萝蜜视频在线观看www入口| 国产精品一区二区3区| 久久久久久毛片免费看| 中文字幕在线亚洲精品| 久久久亚洲一区| a天堂视频在线观看| 亚洲美女淫视频| 在线观看一二三区| 夜夜嗨av一区二区三区四区| 国产精品电影| 97人人香蕉| 国产老头老太做爰视频| 欧美视频一二三| 亚洲精品国产av| 久久精品人人做人人爽| 99只有精品| 日本不卡一区| 午夜综合激情| 国产精品一区二区人妻喷水| 亚洲精品国产无套在线观| 国产精品久久久久久久免费看| 亚洲色图综合久久| 亚洲黄色免费av| 久久99久久99精品蜜柚传媒| 国内一区二区三区| 原创真实夫妻啪啪av| 最近日韩中文字幕| 国产一区二区自拍视频| 这里只有精品视频| 性欧美freehd18| 神马影院午夜我不卡影院| 久久综合伊人| 欧美另类z0zx974| 91福利视频网站| 91精品国产91久久久久游泳池| 国产精品91一区| 波多野结衣的一区二区三区| 一区二区三区国产免费| 国产女人18水真多18精品一级做| 日韩黄色一级视频| 在线日韩av观看| 欧美一区二区三区婷婷| 一区二区在线观看网站| 久久er精品视频| 国产人妻精品一区二区三区不卡 | 老司机av福利| 青青草国产精品97视觉盛宴| 99久久99久久精品免费| 欧美日韩综合不卡| 国产欧美久久久久久久久| 91在线色戒在线| 欧美日韩免费| 538国产视频| 一本色道综合亚洲| av在线资源站| 99免费在线视频观看| 韩日精品在线| 一级国产黄色片| 欧美午夜在线观看| 黄网站免费在线观看| 国产精品乱码视频| 久久不射2019中文字幕| 91麻豆精品国产91久久综合| 69堂国产成人免费视频| 黄色小说在线播放| 欧美国产综合视频| 国内精品国产三级国产a久久| 麻豆一区产品精品蜜桃的特点 | av在线天堂网| 欧美午夜宅男影院在线观看| www.中文字幕久久久| 97人人模人人爽人人少妇| 噜噜爱69成人精品| 亚洲综合视频网站| 日韩电影免费观看在线观看| 国产精品黄色片| 亚洲美免无码中文字幕在线| 亚洲国产经典视频| 一级黄色大毛片| 日本精品视频一区二区三区| 麻豆tv在线| 久久婷婷开心| 麻豆成人综合网| 日韩精品久久久久久久| 影音先锋日韩有码| 好吊妞视频这里有精品| 免费涩涩18网站入口| 亚洲国产视频直播| 都市激情在线视频|