响应调用 Django API CSRF

React calling Django API CSRF

伙计们,

我正在做一个调用 Django 的前端反应 api。 我遇到了一个大问题:我想用 reactjs 调用 Django API,但是 API 需要一个 csrf,我不知道如何获得那个 csrf,在网上看了之后,我看到了一些使用其他功能的人告诉 django api 需要一条重新运行令牌的路由。 我完全迷路了。

如果需要的话,我的 discord Wadi #1916

这里是 good post 如何操作。

重点是:

function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}

然后你可以使用它来获取:

  fetch(url, {
    credentials: 'include',
    method: 'POST',
    mode: 'same-origin',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
      'X-CSRFToken': getCookie('csrftoken')
    },
    body: {}
   })
  }

显然使用 axios 更容易:

import axios from 'axios';

axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = 'X-CSRFToken'

您可能还需要确保在呈现数据的视图上将 csrf 令牌发送到客户端。

from django.views.decorators.csrf import ensure_csrf_cookie
@ensure_csrf_cookie
def your_view(request):
    ...