解決Django+Vue先後端分離的跨域問題及關閉csrf驗證

  先後端分離不免要接觸到跨域問題,跨域的相關知識請參:跨域問題,解決之道html

  在Django和Vue先後端分離的時候也會遇到跨域的問題,由於剛剛接觸Django還不太瞭解,今天花了好長的時間,查閱了好多資料如今解決了這個問題,記錄一下。前端

  1. Django配置vue

    1. 首先在Django框架裏面要安裝django-cors-headers包,在項目根目錄下執行
      pip install django-cors-headers
    2. 配置settings.py
      1. 引入剛剛安裝的包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
        ]
      2. 配置參數
        在配置文件中加入如下內容,可根據本身的狀況做調整npm

        DEBUG = True                                                           #開啓debug模式,注意上線運營時要關閉debug
            ALLOWED_HOSTS = ['*']                                                    # 容許全部ip訪問
            CORS_ALLOW_CREDENTIALS = True
            CORS_ORIGIN_ALLOW_ALL = True                    
            CORS_ALLOW_HEADERS = ('*')                                            #容許全部的請求頭
      3. 配置中間件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', 
            ]
  2. Vue配置
    通常狀況下Vue中日後端請求的話都是經過axios
    1. 安裝axiosaxios

      npm install axios
    2. Vue的main.js配置axios後端

      //配置請求頭,很是重要,有了這個才能夠正常使用POST等請求後臺數據
      axios.defaults.headers.post['Content-Type'] = 'application/x-www-fromurlencodeed'

到此爲止,關於Django+Vue先後端分離的跨域問題就解決了,可是後來發現,仍是沒法請求到數據,由於Django有csrf驗證,咱們能夠經過某種方式將其給關掉,下面就簡單來了解一下:跨域

  1. 在接收前端請求的文件中(我這邊是view.py)中引入session

    from django.views.decorators.csrf import csrf_exempt
  2. 而後在每一個不須要csrf驗證的方法上方加上

    @csrf_exempt

    這樣就能夠了(或者是在settings文件中將csrf的中間件給註釋掉也行)。

本文前半部分參考:django+vue打造先後端分離的項目時,跨域問題的解決! 如需轉載,請註明出處:https://www.cnblogs.com/zhuchenglin/p/9732245.html

相關文章
相關標籤/搜索