簡體   English   中英

Django CSRF cookie 使用 axios 客戶端發送圖像

[英]Django CSRF cookie sending images with axios client

再會。

我需要通過帶有 axios 的客戶端的 post 方法將圖像發送到 Django 服務器,但我在服務器上收到以下消息。

禁止(未設置 CSRF cookie。):

客戶給了我以下答案

xhr.js:177 POST http://127.0.0.1:8000/xxxx/ 403(禁止)

如何解決這個問題? 可以禁用 CSRF cookie=

這是客戶端代碼:

    var formData = new FormData();
    formData.append("imagen", await fetch(`${filepath}`).then((e) => {
        return e.blob()
        })
        .then((blob) => {
            let b: any = blob
            b.lastModifiedDate = new Date()
            b.name = ''
            return b as File
        })
     );

    const axios = require('axios');
   
    axios({
        url:url,
        method:'POST',
        data:formData
    }).then(function(res: any){
        console.log(res)
    
    }).catch((error: any) =>{
        console.log(error)
       //Network error comes in
    });

這是服務器視圖 function (它只是檢查要調試的信息)

def completeInfo (request): 
   print(request)
   return HttpResponse("Bad Response")

我遇到過類似的問題,使用@csrf_exempt解決了我的問題。

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt 
def completeInfo (request): 
   print(request)
   return HttpResponse("Bad Response")

如果你想保持 csrf 檢查,你需要為它提供標題:

在您的模板中:

<script>
  var csrfToken = "{{ csrf_token|escapejs }}";
</script>

然后在您的 axios 調用中:

axios({
    url:url,
    method:'POST',
    data:formData,
    headers: { 'X-CSRFToken': csrfToken }
})

在 django 端,settings.py:

MIDDLEWARE += ['django.middleware.csrf.CsrfViewMiddleware']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM