Django配置跨域請求

今天又遇到了一個問題,之前沒用vue來調django的接口,結果在postman能請求數據能正常返回,在vue裏又老失敗,嘔以爲是地址寫錯了或者調用函數用錯了,結果都不是,從11點多卡到下午3點多QAQ累得趴了會纔起來繼續看,最後還是看錯誤自己分析出來的,所以又得了一次教訓!出問題先看報錯再靠自己經驗分析!報錯很重要很重要很重要!單純地靠自己經驗會走很多彎路!

問題如下:

我在postman測試接口時正常。

1618126025964

在vue裏請求就報錯,此時我的axios也是正常的,代碼大概也沒錯

1618126068075

這裏都說了是跨域問題了啊啊啊瘋了早點注意多好,因爲考慮到安全性,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.

1618125964377

解決辦法:

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',
)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章