国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Django解決ajax跨域訪問問題

2020-01-04 14:39:43
字體:
供稿:網(wǎng)友

這篇文章主要給大家介紹了關(guān)于Django跨域請求問題解決的相關(guān)資料,文中介紹的實現(xiàn)方法包括:使用django-cors-headers全局控制、使用JsonP,只能用于Get方法以及在views.py里設(shè)置響應(yīng)頭,只能控制單個接口,需要的朋友可以參考下。
使用Django在服務(wù)器端寫了一個API,返回一個JSON數(shù)據(jù)。使用Ajax調(diào)用該API:

但是,Chrome瀏覽器提示錯誤:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

這是由于CORS導(dǎo)致的。

什么是CORS?

CORS(跨域資源共享,Cross-Origin Resource Sharing)是一種跨域訪問的機制,可以讓Ajax實現(xiàn)跨域訪問。
其實,在服務(wù)器的response header中,加入“Access-Control-Allow-Origin: *”即可支持CORS,非常的簡單,apache/nginx等怎么配置,見參考文檔。
舉個例子:

  1. API部署在DomainA上;
  2. Ajax文件部署在DomainB上,Ajax文件會向API發(fā)送請求,返回數(shù)據(jù);
  3. 用戶通過DomainC訪問DomainB的Ajax文件,請求數(shù)據(jù)

Django,ajax,跨域

前端打開的是'http://localhost:63343‘地址, 另一個是django服務(wù)器,打開了‘http://localhost:8000‘地址, 所以在'http://localhost:63343‘的javascript對'http://localhost:8000‘進行訪問時,端口不同,屬于跨域訪問.

當我將前端頁面放入django中后,就不會出現(xiàn)跨域訪問的拒絕了.

幾種方法:

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

2.直接修改Django中的views.py文件修改views.py中對應(yīng)API的實現(xiàn)函數(shù),允許其他域通過Ajax請求數(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 

3.安裝django-cors-headers這里還有一各發(fā)現(xiàn)!在Django中,有人開發(fā)了CORS-header的middleware,只在settings.py中做一些簡單的配置即可,開啟CORS,沒有跨域煩惱,真爽!~

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 = TrueCORS_ORIGIN_ALLOW_ALL = TrueCORS_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', ) 

大功告成了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 海口市| 衡山县| 伊通| 吴忠市| 青冈县| 临朐县| 灵山县| 正安县| 临邑县| 根河市| 鄢陵县| 昂仁县| 天等县| 屏山县| 澄城县| 芷江| 汨罗市| 武宁县| 阜阳市| 辽阳县| 洛阳市| 漠河县| 密云县| 衡南县| 略阳县| 焉耆| 原阳县| 龙州县| 枝江市| 昌邑市| 南澳县| 宁陵县| 南皮县| 慈溪市| 获嘉县| 普兰店市| 东乌珠穆沁旗| 莆田市| 区。| 宁城县| 信阳市|