今天又遇到了一個問題,之前沒用vue來調django的接口,結果在postman能請求數據能正常返回,在vue裏又老失敗,嘔以爲是地址寫錯了或者調用函數用錯了,結果都不是,從11點多卡到下午3點多QAQ累得趴了會纔起來繼續看,最後還是看錯誤自己分析出來的,所以又得了一次教訓!出問題先看報錯再靠自己經驗分析!報錯很重要很重要很重要!單純地靠自己經驗會走很多彎路!
問題如下:
我在postman測試接口時正常。
在vue裏請求就報錯,此時我的axios也是正常的,代碼大概也沒錯
這裏都說了是跨域問題了啊啊啊瘋了早點注意多好,因爲考慮到安全性,Django是會默認攔截CORS的,防止黑客製造跨域請求來攻擊網站,所以我們需要主動配置允許跨域請求才能讓vue這個在8080端口上的應用訪問到django這個8000端口上的應用。
Access to XMLHttpRequest at 'http://127.0.0.1:8000/polls/' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
解決辦法:
1.安裝django-cors-headers
pip3 install django-cors-headers
2.在setting.py中的APPS加入corsheaders
INSTALLED_APPS = [
...,
'corsheaders'
]
配置中間件
MIDDLEWARE = [
...,
'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 = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)