简体   繁体   English

在 javascript 创建的元素表单中使用 csrf_token

[英]use csrf_token in javascript created element form

Well i have created form element using javascript.好吧,我已经使用 javascript 创建了表单元素。 The reason is, i am updating user page using ajax.原因是,我正在使用 ajax 更新用户页面。

I have the created form element bellow我有下面创建的表单元素

  var tagform =document.createElemenet('form')
  var tagbutton =document.createElemenet('button')
   tagform.setAttribute('method','post');
   tagform.setAttribute('action','/businesshub/comment_delete/');

   tagbutton.setAttribute('type','submit');
   tagform.appendChild(tagbutton );

The only problem i face when submitting the created form is, i get the error提交创建的表单时我面临的唯一问题是,我收到错误

Forbidden (403)禁止 (403)

CSRF verification failed. CSRF 验证失败。 Request aborted.请求中止。

I am using django .我正在使用 django 。 How can i implemented {% csrf_token %} to my created Element form using javascript.我如何使用 javascript 将 {% csrf_token %} 实现到我创建的元素表单。 Thanks谢谢

Get CSRF Token using使用获取 CSRF 令牌

<script>
        function getCookie(cname) {
            var name = cname + "=";
            var ca = document.cookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) == 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return;
        }

    </script>

And Ajax will be而阿贾克斯将会

$.ajax({
            url: 'your url',
            type: 'POST',
            data: formData,
            headers: {"X-CSRFToken": getCookie('csrftoken')},

            success: function (data) {


            },

}) })

You need the csrf_token to be passed to the server too.您也需要将 csrf_token 传递给服务器。

<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">

in you case something like:在你的情况下是这样的:

var csrf =document.createElemenet('input')
csrf.setAttribute('type','hidden');
csrf.setAttribute('value','{{ csrf_token }}');
tagform.appendChild(csrf);

I got a simple and a better solution .我得到了一个简单且更好的解决方案。 Since in my django template i can use {% csrf_token %} is used因为在我的 django 模板中我可以使用 {% csrf_token %}

i just need to access it using jquery or javascript我只需要使用 jquery 或 javascript 访问它

  <script>
   var csrfToken = document.getElementsByName('csrfmiddlewaretoken')[0].value

  var tagform =document.createElemenet('form')
  var tagbutton =document.createElemenet('button')
  var csrftoken = document.createElement("input");
  csrftoken.setAttribute("type", "hidden");
  csrftoken.setAttribute("name", 'csrfmiddlewaretoken');
  csrftoken.setAttribute("value", csrfToken);
  </script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM