【问题标题】:Django: CSRF verification fail despite token being providedDjango:尽管提供了令牌,但 CSRF 验证失败
【发布时间】:2020-08-07 11:22:18
【问题描述】:

尽管在 ajax 调用中明确声明了令牌,但由于 csrf_token 验证失败,我收到 403 错误。我在其他函数中以相同的方式为我的数据字典提供了很好的效果。

这里是 JS:

$(document).on("click", ".update-cleaning", function(event){
  event.preventDefault();
  var input_field_name = $(this).attr('name')
  var obj_id = $(this).attr('value')
  var model_name = $(this).attr('data-model')
  var field_name = $(this).attr('data-field')
  var value = $("#" + input_field_name + obj_id).val();
  if (!value) {
      alert('Fill the field!')
    }
  else {
  $.ajax({
            url: "{% url 'ajax_update_cleaning' %}",
            type: "POST",
            data: {'object_id': obj_id, 'model_name': model_name, 'field_name': field_name, 'value': value, 'csrfmiddlewaretoken': '{{ csrf_token }}'},
            dataType: 'json',
        })
        .done(function(response){
                    console.log(response);
                })
        }
});

我的 html 表单在一个弹出窗口中,通过点击 <td> 进行切换,如下所示:

<td class="text-md-center with-popover" name="frequency" value="{{cleaning.id}}">
    {{ cleaning.frequency }}
    <div id="frequency{{cleaning.id}}" style="display: none">
    <form method="POST">
    <label for="cleaning_frequency">Frequency: </label>
    <input id="cleaning_frequency{{cleaning.id}}" type="number" name="cleaning" value="{{cleaning.frequency}}"> 
    <button type="submit" class="btn btn-success btn-sm update-cleaning" name="cleaning_frequency" data-model="Cleaning" data-field="frequency" value="{{cleaning.id}}"> Change </button>
    </form>
  </div>
</td>

你能给我一些想法吗?谢谢。

【问题讨论】:

    标签: html jquery django ajax


    【解决方案1】:

    在任何使用 POST 表单的模板中,如果表单用于内部 URL,请在元素内使用 csrf_token 标记,例如:

    <form method="post">{% csrf_token %}
    

    Django Documentation了解更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 2016-09-09
      • 2018-04-13
      • 1970-01-01
      相关资源
      最近更新 更多