<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        Python的Django應(yīng)用程序解決AJAX跨域訪問

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 14:26:14
        文檔

        Python的Django應(yīng)用程序解決AJAX跨域訪問

        Python的Django應(yīng)用程序解決AJAX跨域訪問:針對Django中在編寫供AJAX調(diào)用的API時碰到的跨域問題,我們來總結(jié)下Python的Django應(yīng)用程序解決AJAX跨域訪問問題的方法,其中使用GitHub上開源分享的django-cors-headers尤其推薦引子使用Django在服務(wù)器端寫了一個API,返回一個JSON數(shù)據(jù)。使用Ajax調(diào)
        推薦度:
        導(dǎo)讀Python的Django應(yīng)用程序解決AJAX跨域訪問:針對Django中在編寫供AJAX調(diào)用的API時碰到的跨域問題,我們來總結(jié)下Python的Django應(yīng)用程序解決AJAX跨域訪問問題的方法,其中使用GitHub上開源分享的django-cors-headers尤其推薦引子使用Django在服務(wù)器端寫了一個API,返回一個JSON數(shù)據(jù)。使用Ajax調(diào)

        針對Django中在編寫供AJAX調(diào)用的API時碰到的跨域問題,我們來總結(jié)下Python的Django應(yīng)用程序解決AJAX跨域訪問問題的方法,其中使用GitHub上開源分享的django-cors-headers尤其推薦

        引子
        使用Django在服務(wù)器端寫了一個API,返回一個JSON數(shù)據(jù)。使用Ajax調(diào)用該API:

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

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

        經(jīng)過一番Google發(fā)現(xiàn)這個問題是——CORS導(dǎo)致的。

        什么是CORS?
        CORS(跨域資源共享,Cross-Origin Resource Sharing)是一種跨域訪問的機(jī)制,可以讓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ù)

      4. 以上過程就發(fā)生了跨域訪問。如果直接使用Ajax來請求就會失敗,就像Chrome提示的:

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

        如何解決Ajax跨域訪問問題?
        解決跨域問題,有兩個方法:1.使用jsonp 2.使CORS生效
        使用jsonp方法,需要讓服務(wù)器端放回jsonp格式的response,如Django可以加jsonp相關(guān)的decorator,如:http://www.gxlcms.com/由于我不太喜歡這種方式,所以這里略過了,可看后面的參考資料。
        使用CORS:這個用起來比較方便,現(xiàn)在大多數(shù)瀏覽器都支持了,且我web服務(wù)器完全開放給別人調(diào)用,所以比較推薦CORS。
        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中做一些簡單的配置即可,見:http://www.gxlcms.com/現(xiàn)在用起來服務(wù)器端完全開放,開啟CORS,沒有跨域煩惱,真爽!~
        安裝django-cors-headers:

        pip install django-cors-headers

        在settings.py中增加:

        INSTALLED_APPS = (
         ...
         'corsheaders',
         ...
        )
        
        ...
        
        MIDDLEWARE_CLASSES = (
         ...
         'corsheaders.middleware.CorsMiddleware',
         'django.middleware.common.CommonMiddleware',
         ...
        )

        可以配置允許跨域訪問的白名單或者直接設(shè)置為允許所有的跨域訪問,具體的配置可以看看他們的github頁說明。

        更多Python的Django應(yīng)用程序解決AJAX跨域訪問相關(guān)文章請關(guān)注PHP中文網(wǎng)!

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python的Django應(yīng)用程序解決AJAX跨域訪問

        Python的Django應(yīng)用程序解決AJAX跨域訪問:針對Django中在編寫供AJAX調(diào)用的API時碰到的跨域問題,我們來總結(jié)下Python的Django應(yīng)用程序解決AJAX跨域訪問問題的方法,其中使用GitHub上開源分享的django-cors-headers尤其推薦引子使用Django在服務(wù)器端寫了一個API,返回一個JSON數(shù)據(jù)。使用Ajax調(diào)
        推薦度:
        標(biāo)簽: python ajax 跨域
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲视频免费在线看| 亚洲日产韩国一二三四区| 国产成人自产拍免费视频| 成人免费看片又大又黄| 亚洲人成激情在线播放| 国产精品成人免费福利| 亚洲乱码在线播放| 成人影片麻豆国产影片免费观看| 亚洲国产日产无码精品| 一个人免费高清在线观看| 91在线亚洲综合在线| 久久久久久久久久免免费精品| 国产精品免费无遮挡无码永久视频| 久久精品国产精品亚洲| 中文字幕视频在线免费观看| 国产AV无码专区亚洲Av| 一级毛片免费不卡在线| 亚洲成a人片在线观看久| 免费人成动漫在线播放r18 | 最近中文字幕mv免费高清在线| 四虎在线最新永久免费| 亚洲av乱码一区二区三区香蕉| 在线观看免费a∨网站| 亚洲成A人片777777| 99re在线精品视频免费| 亚洲人成7777| 亚洲精品成a人在线观看| a级成人免费毛片完整版| 亚洲白嫩在线观看| 国产精品久免费的黄网站| 国产线视频精品免费观看视频| 成人永久免费高清| 亚洲一区二区三区免费在线观看| 成年性生交大片免费看| 成人a毛片免费视频观看| 亚洲欧洲日产国产综合网| 成人毛片18女人毛片免费| 一级成人生活片免费看| 亚洲精品视频免费看| 四虎永久在线精品免费观看地址| 亚洲国产日韩a在线播放|