這篇文章將為大家詳細(xì)講解有關(guān)Django中怎么解決ajax跨域訪問(wèn)問(wèn)題,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)從事網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計(jì)公司,作為專(zhuān)業(yè)的成都網(wǎng)站建設(shè)公司,創(chuàng)新互聯(lián)依托強(qiáng)大的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專(zhuān)業(yè)的成都網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!這篇文章主要給大家介紹了關(guān)于Django跨域請(qǐng)求問(wèn)題解決的相關(guān)資料,文中介紹的實(shí)現(xiàn)方法包括:使用django-cors-headers全局控
什么是CORS?
CORS(跨域資源共享,Cross-Origin Resource Sharing)是一種跨域訪問(wèn)的機(jī)制,可以讓Ajax實(shí)現(xiàn)跨域訪問(wèn)。
其實(shí),在服務(wù)器的response header中,加入“Access-Control-Allow-Origin: *”即可支持CORS,非常的簡(jiǎn)單,apache/nginx等怎么配置,見(jiàn)參考文檔。
舉個(gè)例子:
API部署在DomainA上;
Ajax文件部署在DomainB上,Ajax文件會(huì)向API發(fā)送請(qǐng)求,返回?cái)?shù)據(jù);
用戶通過(guò)DomainC訪問(wèn)DomainB的Ajax文件,請(qǐng)求數(shù)據(jù)
前端打開(kāi)的是'http://localhost:63343‘地址, 另一個(gè)是django服務(wù)器,打開(kāi)了‘http://localhost:8000‘地址, 所以在'http://localhost:63343‘的javascript對(duì)'http://localhost:8000‘進(jìn)行訪問(wèn)時(shí),端口不同,屬于跨域訪問(wèn).
當(dāng)我將前端頁(yè)面放入django中后,就不會(huì)出現(xiàn)跨域訪問(wèn)的拒絕了.
幾種方法:
1.使用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)求。
2.直接修改Django中的views.py文件修改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
3.安裝django-cors-headers這里還有一各發(fā)現(xiàn)!在Django中,有人開(kāi)發(fā)了CORS-header的middleware,只在settings.py中做一些簡(jiǎn)單的配置即可,開(kāi)啟CORS,沒(méi)有跨域煩惱,真爽!~
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', )
關(guān)于Django中怎么解決ajax跨域訪問(wèn)問(wèn)題就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。