Django 跨域請(qǐng)求處理的示例代碼
django處理Ajax跨域訪問
使用javascript進(jìn)行ajax訪問的時(shí)候,出現(xiàn)如下錯(cuò)誤

出錯(cuò)原因:javascript處于安全考慮,不允許跨域訪問。下圖是對(duì)跨域訪問的解釋:

概念:
這里說的js跨域是指通過js或python在不同的域之間進(jìn)行數(shù)據(jù)傳輸或通信,比如用ajax向一個(gè)不同的域請(qǐng)求數(shù)據(jù),或者通過js獲取頁(yè)面中不同域的框架中(Django)的數(shù)據(jù)。只要協(xié)議、域名、端口有任何一個(gè)不同,都被當(dāng)作是不同的域。
解決辦法
1. 修改views.py文件
修改views.py中對(duì)應(yīng)API的實(shí)現(xiàn)函數(shù),允許其他域通過Ajax請(qǐng)求數(shù)據(jù):
todo_list = [
{"id": "1", "content": "吃飯"},
{"id": "2", "content": "吃飯"},
]
class Query(View):
@staticmethod
def get(request):
response = JsonResponse(todo_list, safe=False)
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
@staticmethod
def post(request):
print(request.POST)
return HttpResponse()
2. 添加中間件 django-cors-headers
GitHub地址: https://github.com/ottoyiu/django-cors-headers
2.1. 安裝 pip install django-cors-headers
2。2 添加app
INSTALLED_APPS = ( ... 'corsheaders', ... )
2.3 添加中間件
MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10 ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... ]
2.4 配置允許跨站訪問本站的地址
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
'localhost:63343',
)
# 默認(rèn)值是全部:
CORS_ORIGIN_WHITELIST = () # 或者定義允許的匹配路徑正則表達(dá)式.
CORS_ORIGIN_REGEX_WHITELIST = ('^(https?://)?(\w+.)?>google.com$', ) # 默認(rèn)值:
CORS_ORIGIN_REGEX_WHITELIST = ()
2.5 設(shè)置允許訪問的方法
CORS_ALLOW_METHODS = ( 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS' )
2.6 設(shè)置允許的header:
默認(rèn)值:
CORS_ALLOW_HEADERS = ( 'x-requested-with', 'content-type', 'accept', 'origin', 'authorization', 'x-csrftoken' )
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python 實(shí)現(xiàn)mysql增刪查改示例代碼
python中可以通過pymysql實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的連接,并實(shí)現(xiàn)數(shù)據(jù)庫(kù)的各種操作,這篇文章主要給大家介紹了關(guān)于pymsql實(shí)現(xiàn)增刪改查的示例代碼,需要的朋友可以參考下2021-11-11
如何利用python實(shí)現(xiàn)kmeans聚類
K-Means是聚類算法的一種,以距離來判斷數(shù)據(jù)點(diǎn)間的相似度并對(duì)數(shù)據(jù)進(jìn)行聚類,下面這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)kmeans聚類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05
Python隨機(jī)驗(yàn)證碼生成和join?字符串的問題解析
Python中有join()和os.path.join()兩個(gè)函數(shù),join是將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個(gè)新的字符串而os.path.join():?將多個(gè)路徑組合后返回,本文給大家介紹的非常詳細(xì),需要的朋友一起看看吧2022-04-04
詳解如何使用Pandas刪除DataFrame中的非數(shù)字類型數(shù)據(jù)
在數(shù)據(jù)處理和分析過程中,經(jīng)常會(huì)遇到需要清洗數(shù)據(jù)的情況,本文將詳細(xì)介紹如何使用Pandas刪除DataFrame中的非數(shù)字類型數(shù)據(jù),感興趣的小伙伴可以了解下2024-03-03
PyTorch?TensorFlow機(jī)器學(xué)習(xí)框架選擇實(shí)戰(zhàn)
這篇文章主要為大家介紹了PyTorch?TensorFlow機(jī)器學(xué)習(xí)框架選擇實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Python 更快進(jìn)行探索性數(shù)據(jù)分析的四個(gè)方法
今天我給大家分享幾種更快的探索性數(shù)據(jù)分析方法,它們可以進(jìn)一步加速 EDA。 我們以一個(gè)學(xué)生考試成績(jī)的例子,創(chuàng)建一個(gè)如下所示的 DataFrame 并繼續(xù)操作。歡迎收藏學(xué)習(xí),喜歡點(diǎn)贊支持2021-11-11
Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法分析
這篇文章主要介紹了Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法,結(jié)合實(shí)例形式分析了Beautiful Soup的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-12-12

