最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VUE django 跨域、csrf令牌的問題

 更新時間:2024年09月21日 10:11:34   作者:貪玩的小金魚  
在Vue和Django進行前后分離開發(fā)時,經(jīng)常會遇到跨域和CSRF令牌驗證問題,本文詳細介紹了如何在Django后端設置視圖獲取CSRF令牌,并在Vue前端進行配置以確保安全的數(shù)據(jù)交互,文章提供了后端視圖創(chuàng)建、settings配置以及前端axios請求封裝的具體方法

跨域問題

使用VUE django前后分離,跨域跟django CSRF令牌是個很頭疼問題,跨域問題解決方法很多,bing一下就有很多這里先略過,主要講一下令牌用法,取消令牌檢測這里有提到django開發(fā)。

django前后分離 CSRF獲取及使用

首先要獲取CSRF令牌,django中GET請求是不會進行CSRF驗證的,這里我們可以創(chuàng)建一個django視圖,前端通過GET請求來獲取,

Django 配置

1、獲取token的視圖

這里我寫了兩個:

  • 第一個是前端發(fā)送GET請求直接獲取
  • 第二個是為了服務端處理登錄請求時候 通過后將token以及登錄所需的信息一并傳遞給前端

為什么想了兩個,是因為懶,如果都用第一種,后端需要處理一下json數(shù)據(jù),就直接復制只傳遞token字符串,在封裝成json給前端。

def get_csrf_token(request):
    csrf_token = get_token(request)
    print(csrf_token)
    return JsonResponse({'csrfToken': csrf_token})
    # return csrf_token
def get_csrf_token1(request):
    csrf_token = get_token(request)
    print(csrf_token)
    return csrf_token

2、后端settings配置文件,需要配置以下信息。

CORS_ALLOW_HEADERS = [
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'Pragma',
    # 添加其他你需要的請求頭,這里比較多
]
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',    #放到前邊
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',  #還有這個
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'sbh_bly_api.middleware.CustomExceptionMiddleware',
    
]
# 配置CSRF的信任域,與跨域配置相同,這個很重要,我就是因為這個卡了一天
CSRF_TRUSTED_ORIGINS = [
    'http://127.0.0.1:8080',  # 確保與前端地址匹配
]

3、VUE前端配置

注意我的VUE項目用的ts,如果用js的請自行轉換一下。

1) axios封裝,這里對axios請求做了封裝 http.ts文件,這里的代碼,是將token存儲到了 store中,這里是取值“const token = store.state.token” 根據(jù)實際項目,和習慣來確定存儲位置。

// http.ts

import axios, { AxiosInstance,  AxiosRequestConfig,  AxiosResponse } from 'axios';
import store from '@/store';

// 創(chuàng)建 Axios 實例
const instance: AxiosInstance = axios.create({
  baseURL: 'http://127.0.0.1:8000',
  headers: {
    'Content-Type': 'application/json'
  },
});

// 請求攔截器
import axios, { AxiosInstance,  AxiosRequestConfig,  AxiosResponse } from 'axios';
import store from '@/store';

// 創(chuàng)建 Axios 實例
const instance  = axios.create({
  baseURL: 'http://127.0.0.1:8000',
  timeout: 3000,
  headers: {
    'Content-Type': 'application/json'
  },
});

// 請求相關處理 請求攔截 在請求攔截中可以補充請求相關的配置
// interceptors axios的攔截器對象
instance.interceptors.request.use(config => {
  // config 請求的所有信息
 // console.log(config);
 const token  = localStorage.token
 config.headers['X-CSRFToken'] = token
 return config // 將配置完成的config對象返回出去 如果不返回 請求講不會進行
}, err => {
 // 請求發(fā)生錯誤時的相關處理 拋出錯誤
Promise.reject(err)
})

instance.interceptors.response.use(res => {
  // 我們一般在這里處理,請求成功后的錯誤狀態(tài)碼 例如狀態(tài)碼是500,404,403
  // res 是所有相應的信息
  console.log(res)
 return Promise.resolve(res)
}, err => {
  // 服務器響應發(fā)生錯誤時的處理
  Promise.reject(err)
})
export default instance;

2)main.ts配置項,在main中配置開啟 axios 請求時發(fā)送請求頭

import axios from 'axios';
axios.defaults.withCredentials = true;

3)get 請求獲取令牌

import axios from '@/http'
const get_token = () => {
    console.log("aa")
   
    var post_data = JSON.stringify({
        username: "123",
        password: "1234"
    })
    axios({
        method: 'GET',
        url: axios.defaults.baseURL + '/api/get-csrf-token/',
        data: post_data
    })
        .then(function (response) {
            console.log(document.cookie)
         
        //    const token = document.cookie.split('=')[1];
            //請求成功,處理業(yè)務邏輯
            console.log(response.data.csrfToken)
            // store.state.token =token
            // 保存token
            store.state.token =response.data.csrfToken
        })
        .catch(function (error) {
            //請求失敗,處理業(yè)務邏輯
            console.log(error)
        })
}

如果不成功請留言我們一起解決

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • vue.js實現(xiàn)的綁定class操作示例

    vue.js實現(xiàn)的綁定class操作示例

    這篇文章主要介紹了vue.js實現(xiàn)的綁定class操作,結合實例形式分析了vue.js綁定class常見的3種操作技巧,需要的朋友可以參考下
    2018-07-07
  • vue3+ts中ref與reactive指定類型實現(xiàn)示例

    vue3+ts中ref與reactive指定類型實現(xiàn)示例

    這篇文章主要為大家介紹了vue3+ts中ref及reactive如何指定類型的實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Vue.js 時間轉換代碼及時間戳轉時間字符串

    Vue.js 時間轉換代碼及時間戳轉時間字符串

    這篇文章主要介紹了Vue.js 時間轉換代碼及時間戳轉時間字符串,需要的朋友可以參考下
    2018-10-10
  • Vue如何得到一行的數(shù)據(jù)

    Vue如何得到一行的數(shù)據(jù)

    在Vue中,rows為Object數(shù)組,直接使用rows[0]即可獲取單行數(shù)據(jù),無需調(diào)用getById;修改數(shù)據(jù)時可用toRaw避免重復查詢,提升效率
    2025-08-08
  • vue2+element-ui+nodejs實現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫的方法

    vue2+element-ui+nodejs實現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫的方法

    在Web開發(fā)中經(jīng)常需要使用圖片,有時候需要對圖片進行上傳,這篇文章主要給大家介紹了關于vue2+element-ui+nodejs實現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • Vue實現(xiàn)模糊查詢的簡單方法實例

    Vue實現(xiàn)模糊查詢的簡單方法實例

    這篇文章主要給大家介紹了關于Vue實現(xiàn)模糊查詢的簡單方法,在vue中,前端模糊搜索主要是用computed屬性實現(xiàn),本文通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • vue請求服務器數(shù)據(jù)后綁定不上的解決方法

    vue請求服務器數(shù)據(jù)后綁定不上的解決方法

    今天小編就為大家分享一篇vue請求服務器數(shù)據(jù)后綁定不上的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • Vue Router路由守衛(wèi)超詳細介紹

    Vue Router路由守衛(wèi)超詳細介紹

    路由守衛(wèi),簡單理解來說就是,當用戶要進行一些操作時,我需要用戶的一些信息或數(shù)據(jù)或行為,我判斷過后,才會同意用戶進行操作,說到這里,我想大家心里都或多或少有點理解了吧
    2023-01-01
  • Vue報錯"Failed?to?resolve?loader:less-loader"的解決方法

    Vue報錯"Failed?to?resolve?loader:less-loader"的解決方

    這篇文章主要給大家介紹了關于Vue報錯"Failed?to?resolve?loader:less-loader"的解決方法,文中通過圖文介紹的非常詳細,對同樣遇到這樣問題的朋友具有一定的需要的朋友可以參考下
    2023-02-02
  • vue截取視頻第一幀的圖片問題

    vue截取視頻第一幀的圖片問題

    這篇文章主要介紹了vue截取視頻第一幀的圖片問題,基本就是用cavas進行繪制,解決一下跨域問題,截視頻第一幀,然后根據(jù)視頻原本的寬高進行繪制,最后轉一下圖片格式即可,需要的朋友可以參考下
    2022-11-11

最新評論

德江县| 乐业县| 安阳市| 尤溪县| 隆德县| 五大连池市| 碌曲县| 南昌市| 英山县| 扶风县| 承德县| 浏阳市| 宜川县| 吉安县| 淮阳县| 叙永县| 会同县| 翁源县| 保康县| 恩平市| 扬中市| 永吉县| 赣州市| 龙泉市| 南靖县| 长宁区| 黑龙江省| 垦利县| 沁阳市| 如皋市| 江源县| 漾濞| 临泽县| 灵川县| 乌海市| 水富县| 张家界市| 嘉祥县| 天镇县| 瑞金市| 遂宁市|