从js向django rest框架发出发布请求

时间:2020-06-16 01:02:02

标签: javascript django-rest-framework axios

我有一个DFR API端点:

url = http://127.0.0.1:8000/x/y/

运行JS代码的页面的网址:http://127.0.0.1:8000/x/z/1/ 我已经在浏览器中以User1身份登录。

POST请求-来自DRF浏览器api-很好。

GET请求-来自javascript-很好。

POST请求-来自javascript-403错误。

所以也许我不知道如何从JS发出经过身份验证的Ajax请求。当我从浏览器api执行相同的请求时,可能是浏览器负责身份验证。

我当前的js代码:

axios({
    method: 'post',
    baseURL: window.location.origin,
    url: '/x/y/',
// adding auth header also gives same 403 error for post request
// headers: {
//     Authorization: 'Token e77b8ca898b51cde72dcf2aa2c385942d771e972'
// },
    data: {
        name: 'xyz'
    },
    responseType: 'json',
})
    .then(function (response) {
        console.log(' success');
    })

    .catch(function (error) {
        console.log(' error=', error.message);
    });

2 个答案:

答案 0 :(得分:2)

如果您使用的是chrome浏览器,请进入控制台ctrl+shift+j,然后进入网络。 发出发布请求后,我们可以在此网络标签中看到错误消息。 我的帖子请求出现以下错误:

"CSRF Failed: CSRF token missing or incorrect."

要在axios ajax请求上添加csrf令牌,请将以下代码行放在js文件的开头:

axios.defaults.xsrfCookieName = 'csrftoken';
axios.defaults.xsrfHeaderName = "X-CSRFTOKEN";

答案 1 :(得分:1)

在请求中添加CSRF令牌时,CSRF会导致403错误。尝试在请求标头中添加csrf令牌