精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

女同毛片一区二区三区| 精品伦理一区二区三区| 中文字幕91视频| 精品九九久久| 一区二区三区日本| 91精品国产自产在线| 日本视频在线免费| 欧美h版在线观看| 亚洲高清免费视频| 欧美日本亚洲| 男人天堂视频在线| 五月激情久久久| 欧美一区二视频| 给我免费播放片在线观看| 欧美色18zzzzxxxxx| 日韩精品欧美精品| 精品自在线视频| 成人无码www在线看免费| 成人日韩在线观看| 亚洲人精品一区| 国产精品高潮呻吟久久| 51精品国产黑色丝袜高跟鞋| 少妇光屁股影院| 日韩精品第二页| 午夜久久久久久久久| 亚欧精品在线| 六月婷婷综合网| 日韩电影免费一区| 九九热这里只有精品6| 激情综合丁香五月| 国产精品视频一区二区三区| 亚洲高清在线视频| 色综合久久88色综合天天提莫| 精品人妻无码一区二区色欲产成人 | 亚洲日本中文字幕| 岛国大片在线免费观看| 在线观看网站免费入口在线观看国内| 中文字幕亚洲不卡| 国产一区二区三区高清| 91在线观看喷潮| 国产日韩欧美一区在线| 久久久成人av| 摸摸摸bbb毛毛毛片| 欧美在线在线| 在线播放欧美女士性生活| 欧美大黑帍在线播放| 日本视频在线观看| 99精品视频在线观看| 91在线播放国产| 亚洲精品一区二三区| 亚洲日本黄色| 欧美精品aaa| √天堂中文官网8在线| 国产一区二区观看| 日韩精品免费在线播放| 任你躁av一区二区三区| 欧洲大片精品免费永久看nba| 欧美视频在线一区二区三区| 美女网站免费观看视频| www.日韩| 亚洲国产美国国产综合一区二区| 先锋影音男人资源| 欧美日韩在线看片| 中文字幕av一区二区三区| 品久久久久久久久久96高清| 人妻一区二区三区免费| 不卡的av在线播放| 国产高清精品一区| 成人久久久精品国产乱码一区二区 | 欧美日韩五码| 91激情在线视频| 国产成人精品无码播放| 免费成人直播| 在线亚洲精品福利网址导航| 日本三级免费观看| 345成人影院| 91福利资源站| 国内自拍视频网| 超碰在线cao| 精品久久久久久中文字幕| 国产h视频在线播放| 免费在线小视频| 91黄色激情网站| 高清一区在线观看| 欧美成人三级| 日韩久久精品一区| 在线视频 日韩| 一区二区三区在线资源| 精品国产欧美一区二区| 香蕉视频污视频| 亚洲精品国产动漫| 在线观看国产欧美| 丝袜美腿小色网| 亚洲东热激情| 国产精品久久激情| 国产免费不卡视频| www.激情成人| 欧美污视频久久久| 日本中文在线| 亚洲高清一区二区三区| 国产精品99久久免费黑人人妻| 成人看片网站| 日韩精品一区二区三区在线 | 在线观看av的网址| 成人高潮aa毛片免费| 一本久久精品一区二区| 天堂视频免费看| 丁香婷婷成人| 精品视频久久久| 99精品中文字幕| 亚洲狼人精品一区二区三区| 国产精品久久一| www.国产黄色| 国产欧美一区二区三区沐欲| 99久热在线精品视频| 手机在线观看av网站| 欧美日韩精品高清| 熟女人妻在线视频| 婷婷亚洲最大| 日本久久精品视频| 国产欧美一级片| 久久综合九色综合97婷婷| 国产系列第一页| 电影一区二区三| 91精品国产综合久久精品| 国产精品三级在线观看无码| 久久精品国产68国产精品亚洲| 欧美俄罗斯性视频| 亚洲在线视频播放| 久久蜜桃av一区二区天堂| 青青草免费在线视频观看| 玛雅亚洲电影| 亚洲精品suv精品一区二区| 操她视频在线观看| 久久亚洲图片| 国产伦精品一区二区三区四区视频 | 欧美性天天影视| 色婷婷综合视频在线观看| 日本少妇激三级做爰在线| 国产精品手机在线播放| 久久久久久国产| 一女二男一黄一片| 国产日韩欧美精品一区| 免费毛片网站在线观看| 国产亚洲精品精品国产亚洲综合| 亚洲国产精彩中文乱码av在线播放| 亚洲欧美卡通动漫| 亚洲中午字幕| 精品欧美日韩在线| 欧美一卡二卡| 日韩欧美一级精品久久| 五月天色婷婷丁香| 久久精品国产一区二区三区免费看| 久久久久久久久四区三区| 日本欧美在线视频免费观看| 欧美在线视频全部完| 极品国产人妖chinesets亚洲人妖| 国产乱淫av一区二区三区| 日本免费高清不卡| 在线视频超级| 亚洲国产91精品在线观看| 九九久久免费视频| 国产成人av福利| 日韩欧美一级在线| 一区二区三区高清在线观看| 久久久999精品| 国产精品久久久久久免费| 国产精品家庭影院| 久久九九国产视频| 国产精品一在线观看| 国产精品91在线| 头脑特工队2免费完整版在线观看| 一级女性全黄久久生活片免费| 337p日本欧洲亚洲大胆张筱雨 | 精品欧美一区二区久久久| 美女诱惑黄网站一区| 欧美一区国产一区| 香蕉久久免费电影| 色噜噜狠狠狠综合曰曰曰88av| 中国女人真人一级毛片| 国产精品久久久久久一区二区三区| www.夜夜爽| 欧美一区不卡| 岛国视频一区免费观看| 国产ktv在线视频| 亚洲美女中文字幕| 中文字幕久久久久| 亚洲靠逼com| 在线免费观看a级片| 亚洲永久字幕| 亚洲一区二三| 99精品中文字幕在线不卡| 久久久久久噜噜噜久久久精品| 色呦呦免费观看| 韩曰欧美视频免费观看| 阿v天堂2014| 国产乱人伦精品一区二区在线观看| 一区二区三区|亚洲午夜| 日韩成人久久| 欧美在线一区二区视频| av在线第一页| 日韩精品一区二区在线| 久久夜色精品国产噜噜亚洲av| 日本一二三不卡| 污污视频网站在线| 亚洲国产激情| 亚洲一区二区免费视频软件合集| 国产亚洲亚洲国产一二区| 91精品国产色综合久久不卡98| 日韩在线视频免费| 欧美日韩一区高清| 国产一区二区三区影院| 国产精品久久久久影院老司 | 色播视频在线播放| 国产精品拍天天在线| 李丽珍裸体午夜理伦片| 日本视频免费一区| www.av片| 五月精品视频| 日韩一区二区三区高清| swag国产精品一区二区| 国产精品老女人精品视频| 国产黄色av网站| 在线视频一区二区免费| 国产无码精品久久久| 亚洲视频在线观看一区| 在线观看免费黄色网址| 91免费版在线| 日韩精品人妻中文字幕有码 | 成人av.网址在线网站| 欧美色999| 欧美一区亚洲一区| 国产不卡123| 国外成人性视频| 免费看电影在线| 九九综合九九综合| 99热国产在线| 欧美激情亚洲一区| 日本三级在线观看网站| 欧美成人免费播放| 老司机在线永久免费观看| 中文字幕在线看视频国产欧美| 你懂的在线观看视频网站| 日韩经典中文字幕| 日本私人网站在线观看| 日韩激情片免费| 欧美老女人性开放| 国产亚洲综合久久| av在线电影网| 精品国偷自产在线视频| 免费成人黄色| 久久伊人91精品综合网站| 大地资源网3页在线观看| 欧美xxxx做受欧美| 色综合999| 久久久久久亚洲精品不卡| 国产丝袜在线播放| 777国产偷窥盗摄精品视频| 日韩精品美女| 国产精品观看在线亚洲人成网| 中文字幕av一区二区三区佐山爱| 国产精品69久久久久| 日韩在线电影| 99久久精品免费看国产一区二区三区 | 可以在线观看的黄色| 一区二区在线视频| 蜜桃av在线免费观看| 欧美成人午夜剧场免费观看| 欧美1—12sexvideos| 欧美一区二粉嫩精品国产一线天| videos性欧美另类高清| 国产日本欧美一区| 4438全国亚洲精品观看视频| 精品视频第一区| 成人久久电影| 欧美a级免费视频| 国产日韩一区| 亚洲娇小娇小娇小| 岛国av在线一区| 一区二区三区久久久久| 国产精品久久久久aaaa樱花| 久久久久久欧美精品se一二三四| 五月婷婷激情综合网| 中文字幕一区二区三区波野结| 欧美一区二区在线视频| 在线观看xxx| 久久精品国产2020观看福利| 51av在线| 国产欧美精品久久久| 美国成人xxx| 亚洲五月六月| 国产精品嫩草99av在线| 天天干天天综合| www.欧美日韩| 看免费黄色录像| 日韩欧美亚洲综合| 国产视频在线观看视频| 日韩美女av在线| 亚洲综合伊人久久大杳蕉| 热久久这里只有| 亚洲超碰在线观看| 日韩欧美在线电影| 99精品国产99久久久久久福利| 天天干天天操天天做| av一区二区三区四区| 97在线观看免费高| 色悠悠久久综合| 国产成人无码www免费视频播放| 亚洲天堂av在线免费观看| 影音先锋在线视频| 国产精品色婷婷视频| 日韩理论电影中文字幕| 永久免费网站视频在线观看| 日本成人在线一区| 亚洲调教欧美在线| 一区二区三区免费在线观看| 中文字幕网址在线| 国产午夜精品免费一区二区三区 | 亚洲精品一二三四| 国产女同互慰高潮91漫画| 日韩伦人妻无码| 日韩欧美国产不卡| 国产原创在线观看| 国产原创欧美精品| 经典一区二区| 日韩av资源在线| 97se狠狠狠综合亚洲狠狠| 久草资源在线视频| 欧美xxx久久| a视频在线播放| 91欧美精品午夜性色福利在线| 欧美亚洲激情| 精品久久久久av| ww亚洲ww在线观看国产| 国产成人啪精品午夜在线观看| 91精品国产欧美一区二区| 日本三级视频在线观看| 国产九九精品视频| 日韩夫妻性生活xx| www.com黄色片| 中文字幕av资源一区| 中文字幕在线日亚洲9| 中文字幕日韩视频| 成人国产在线| 一本色道久久综合亚洲二区三区| 日韩成人午夜精品| 国产99在线 | 亚洲| 欧美视频一区二区三区在线观看| 国产粉嫩一区二区三区在线观看| 国产ts一区二区| 精品国产精品国产偷麻豆| 中文字幕在线观看第三页| 中文一区二区完整视频在线观看| 最近中文在线观看| 色偷偷av一区二区三区| 91成人精品观看| 永久免费网站视频在线观看| 国产精品亚洲一区二区三区在线 | 国内精品99| 国产精品入口麻豆| 欧美午夜女人视频在线| 你懂的免费在线观看| 国产精品视频网址| 亚洲人metart人体| 第一页在线视频| 色综合网站在线| 三区四区电影在线观看| 99porn视频在线| 午夜亚洲影视| 五月婷婷婷婷婷| 精品久久人人做人人爽| a一区二区三区| 吴梦梦av在线| 97se亚洲国产综合在线| 又骚又黄的视频| 欧美激情小视频| 九九亚洲精品| 亚洲日本黄色片| 亚洲第一福利视频在线| 大地资源中文在线观看免费版| 91夜夜未满十八勿入爽爽影院| 精品成人一区| 久久久久久国产免费a片| 欧美一区二区三区视频| 性欧美freesex顶级少妇| 亚洲日本欧美在线| jlzzjlzz国产精品久久| 中日韩av在线| 高清一区二区三区四区五区| 不卡日本视频| 在线中文字日产幕| 欧美日韩一二区| 黄色aa久久| 欧美精品久久96人妻无码| 久久亚区不卡日本| 成人av手机在线| 国产精品流白浆视频| 一区二区三区国产盗摄| 午夜爽爽爽男女免费观看| 亚洲欧洲在线免费|