响应调用 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):
...
伙计们,
我正在做一个调用 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):
...