先後端分離不免要接觸到跨域問題,跨域的相關知識請參:跨域問題,解決之道html
在Django和Vue先後端分離的時候也會遇到跨域的問題,由於剛剛接觸Django還不太瞭解,今天花了好長的時間,查閱了好多資料如今解決了這個問題,記錄一下。前端
Django配置vue
pip install django-cors-headers
引入剛剛安裝的包ios
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'corsheaders' #剛纔安裝的django-cors-headers包所引入的app ]
配置參數
在配置文件中加入如下內容,可根據本身的狀況做調整npm
DEBUG = True #開啓debug模式,注意上線運營時要關閉debug ALLOWED_HOSTS = ['*'] # 容許全部ip訪問 CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_HEADERS = ('*') #容許全部的請求頭
配置中間件django
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', #注意順序,必須放在這兒 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
安裝axiosaxios
npm install axios
Vue的main.js配置axios後端
//配置請求頭,很是重要,有了這個才能夠正常使用POST等請求後臺數據 axios.defaults.headers.post['Content-Type'] = 'application/x-www-fromurlencodeed'
到此爲止,關於Django+Vue先後端分離的跨域問題就解決了,可是後來發現,仍是沒法請求到數據,由於Django有csrf驗證,咱們能夠經過某種方式將其給關掉,下面就簡單來了解一下:跨域
在接收前端請求的文件中(我這邊是view.py)中引入session
from django.views.decorators.csrf import csrf_exempt
而後在每一個不須要csrf驗證的方法上方加上
@csrf_exempt
這樣就能夠了(或者是在settings文件中將csrf的中間件給註釋掉也行)。
本文前半部分參考:django+vue打造先後端分離的項目時,跨域問題的解決! 如需轉載,請註明出處:https://www.cnblogs.com/zhuchenglin/p/9732245.html