菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
323
0

Django Ajax请求的403问题

原创
05/13 14:22
阅读数 994129

标签:ons   排查   OLE   ESS   中间   pre   csrf   tps   djang   

问题原因:

Django的跨站请求伪造中间件:POST请求中缺少csrftoken参数和相关的值。
问题排查:登陆后才会具有csrftoken;ajax中放在`header`中

参考连接:

https://docs.djangoproject.com/en/3.1/ref/csrf/#ajax

代码参考:

<script>
    function getCookie(name) {
            let cookieValue = null;
            if (document.cookie && document.cookie !== ‘‘) {
                const cookies = document.cookie.split(‘;‘);
                for (let i = 0; i < cookies.length; i++) {
                    const cookie = cookies[i].trim();
                    // Does this cookie string begin with the name we want?
                    if (cookie.substring(0, name.length + 1) === (name + ‘=‘)) {
                        cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                        break;
                    }
                }
            }
            return cookieValue;
        }


        function add_data() {
            const csrftoken = getCookie(‘csrftoken‘);

            $.ajax({
                headers: {‘X-CSRFToken‘: csrftoken},
                url: "{% url ‘add‘ %}",
                type: "POST",
                data: {"type": "{{ type }}", "data": 1},

                success: function (result) {
                    if (result.code === 200) {
                        console.log(result.msg)
                    }
                    console.log(result)
                },
                fail: function (result) {
                    console.log(result)
                },
            });
        }
</script>

Django Ajax请求的403问题

发表评论

0/200
323 点赞
0 评论
收藏
为你推荐 换一批