最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django跨域請(qǐng)求問(wèn)題的解決方法示例

 更新時(shí)間:2018年06月16日 10:09:49   作者:畫(huà)星星高手  
這篇文章主要給大家介紹了關(guān)于Django跨域請(qǐng)求問(wèn)題解決的相關(guān)資料,文中介紹的實(shí)現(xiàn)方法包括:使用django-cors-headers全局控制、使用JsonP,只能用于Get方法以及在views.py里設(shè)置響應(yīng)頭,只能控制單個(gè)接口,需要的朋友可以參考下

前言

本文主要給大家介紹了關(guān)于Django跨域請(qǐng)求問(wèn)題解決的幾種方法,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

幾種方法:

  • 使用django-cors-headers全局控制
  • 使用JsonP,只能用于Get方法
  • 在views.py里設(shè)置響應(yīng)頭,只能控制單個(gè)接口

django-cors-headers

首先安裝

pip install django-cors-headers

然后在settings.py里配置一番就可以

INSTALLED_APPS = [
 ...
 'corsheaders',
 ...
 ] 

MIDDLEWARE_CLASSES = (
 ...
 'corsheaders.middleware.CorsMiddleware',
 'django.middleware.common.CommonMiddleware', # 注意順序
 ...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
 '*'
)

CORS_ALLOW_METHODS = (
 'DELETE',
 'GET',
 'OPTIONS',
 'PATCH',
 'POST',
 'PUT',
 'VIEW',
)

CORS_ALLOW_HEADERS = (
 'XMLHttpRequest',
 'X_FILENAME',
 'accept-encoding',
 'authorization',
 'content-type',
 'dnt',
 'origin',
 'user-agent',
 'x-csrftoken',
 'x-requested-with',
 'Pragma',
)

大功告成了。

JsonP

使用Ajax獲取json數(shù)據(jù)時(shí),存在跨域的限制。不過(guò),在Web頁(yè)面上調(diào)用js的script腳本文件時(shí)卻不受跨域的影響,JSONP就是利用這個(gè)來(lái)實(shí)現(xiàn)跨域的傳輸。因此,我們需要將Ajax調(diào)用中的dataType從JSON改為JSONP(相應(yīng)的API也需要支持JSONP)格式。

JSONP只能用于GET請(qǐng)求。

什么是JSONP

首先提一下JSON這個(gè)概念,JSON是一種輕量級(jí)的數(shù)據(jù)傳輸格式,被廣泛應(yīng)用于當(dāng)前Web應(yīng)用中。JSON格式數(shù)據(jù)的編碼和解析基本在所有主流語(yǔ)言中都被實(shí)現(xiàn),所以現(xiàn)在大部分前后端分離的架構(gòu)都以JSON格式進(jìn)行數(shù)據(jù)的傳輸。

那么JSONP是什么呢?

首先拋出瀏覽器同源策略這個(gè)概念,為了保證用戶訪問(wèn)的安全,現(xiàn)代瀏覽器使用了同源策略,即不允許訪問(wèn)非同源的頁(yè)面,詳細(xì)的概念大家可以自行百度。這里大家只要知道,在ajax中,不允許請(qǐng)求非同源的URL就可以了,比如www.a.com下的一個(gè)頁(yè)面,其中的ajax請(qǐng)求是不允許訪問(wèn)www.b.com/c.php這樣一個(gè)頁(yè)面的。

JSONP就是用來(lái)解決跨域請(qǐng)求問(wèn)題的,那么具體是怎么實(shí)現(xiàn)的呢?

JSONP原理

ajax請(qǐng)求受同源策略影響,不允許進(jìn)行跨域請(qǐng)求,而script標(biāo)簽src屬性中的鏈接卻可以訪問(wèn)跨域的js腳本,利用這個(gè)特性,服務(wù)端不再返回JSON格式的數(shù)據(jù),而是返回一段調(diào)用某個(gè)函數(shù)的js代碼,在src中進(jìn)行了調(diào)用,這樣實(shí)現(xiàn)了跨域。

JSONP具體實(shí)現(xiàn)

127.0.0.1:8000中的index.html

<!DOCTYPE html>
<html>
<head>
<title>GoJSONP</title>
</head>
<body>
$(".jsonp_test").click(function () {
$.ajax({
url:"http://127.0.0.1:8008/service/",
type:"get",
dataType:"jsonp", // 偽造ajax 基于script
jsonp: 'callbacks',
//jsonpCallback:"alex",
success:function (data) {
console.log(data)
}
})
})
<button class='jsop_test'>測(cè)試</button>
</body> </html>

127.0.0.1:8080的views

import json
def jsonp_test(request):
func=request.GET.get("callbacks") #獲取請(qǐng)求的callbacks參數(shù)
info={"name":"fuyong","age":18} #定義數(shù)據(jù)
return HttpResponse(" ('%s')"%(func,json.dumps(info))) #傳json對(duì)象

Views.py配置響應(yīng)頭

修改views.py中對(duì)應(yīng)API的實(shí)現(xiàn)函數(shù),允許其他域通過(guò)Ajax請(qǐng)求數(shù)據(jù):

def myview(request): 
 response = HttpResponse(json.dumps({“key”: “value”, “key2”: “value”})) 
 response[“Access-Control-Allow-Origin”] = “*” 
 response[“Access-Control-Allow-Methods”] = “POST, GET, OPTIONS” 
 response[“Access-Control-Max-Age”] = “1000” 
 response[“Access-Control-Allow-Headers”] = “*” 
 return response

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

嘉义县| 汨罗市| 岳普湖县| 浦江县| 安阳县| 马山县| 红原县| 莱州市| 嵩明县| 永安市| 阿瓦提县| 台北县| 永城市| 淮滨县| 仪征市| 和政县| 绥宁县| 济南市| 固原市| 江川县| 桂林市| 兴义市| 金山区| 平乡县| 武冈市| 原平市| 潞西市| 福清市| 珲春市| 秭归县| 龙海市| 太康县| 阿克陶县| 溆浦县| 隆德县| 阿坝县| 成安县| 元氏县| 肥乡县| 上饶县| 靖宇县|