Skip to main content
 首页 » 编程设计

python之Ajax 的 Django csrf token

2025年05月04日35Leo_wl

我在表格中给出了 {% csrf_token %}。 我是否必须在 AJAX $.ajax({ ......... )} 中提供另一个 {% csrf_token %} ?

<form method="post" data-validate-username-url="{% url 'validate_username' %}"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <button type="submit">Sign up</button> 
  </form> 
 
 
    <script src="https://code.jquery.com/jquery-3.1.0.min.js"></script> 
 
 
    <script> 
    $("#id_username").change(function () { 
      console.log($(this).val()); 
      var form = $(this).closest("form"); 
      $.ajax({ 
        url: form.attr("data-validate-username-url"), 
        data: form.serialize(), 
        dataType: 'json', 
        success: function (data) { 
          if (data.is_taken) { 
            alert(data.error_message); 
          } 
        } 
      }); 
 
    }); 
  </script> 

请您参考如下方法:

请参阅下文了解我如何更改您的代码。 csrf_token 被分配给一个带有 Django 模板的变量。您可以在任何 Javascript 代码中生成此变量。

token 然后包含在 header 中

 <script> 
    var token = '{{csrf_token}}'; 
 
    $("#id_username").change(function () { 
      console.log($(this).val()); 
      var form = $(this).closest("form"); 
      $.ajax({ 
        headers: { "X-CSRFToken": token }, 
        url: form.attr("data-validate-username-url"), 
        data: form.serialize(), 
        dataType: 'json', 
        success: function (data) { 
          if (data.is_taken) { 
            alert(data.error_message); 
          } 
        } 
      }); 
 
    }); 
  </script>