当我点击按钮更新我的表格CSRF验证失败弹出窗口

时间:2018-04-25 12:09:14

标签: python django

我的index.html模板中有两种不同的表单,而且我使用csrf令牌的表单中都有两种形式。 我面临的问题是,当我尝试更新表单时,我发现" CSRF验证失败。请求已中止。"我已经搜索了本网站和其他网站上的几乎所有问题,并且仍然显示了错误。

这是我的第一个添加学生入学的表格:

<form action = "{% url 'studentapp:addstudent' %}" id="addform" method = "POST">
              {% csrf_token %}
              <div class = "form-group">
                <label for = "your_name">
                  Your name:
                </label>
                <input class = "form-control" id="new_name" type = "text" name="name" value="{{ current_name }}" placeholder="Enter your name">
              </div>
              <div class="form-group">
                <label for = "course_name">
                  Course:
                </label>
                <input id="new_course" class = 'form-control' type = "text" name="course" value="{{ current_course }}" placeholder="Enter your course">
              </div>
              <div class = "form-group">
                <label for = "rollno">
                  Roll No.:
                </label>
                <input id="new_rollno" type = "text" class = 'form-control' name="roll" value="{{ current_roll }}" placeholder="Enter your roll number">
              </div>
              <div class = "form-group">
                <label for ="addr">
                  Address:
                </label>
                <textarea id="new_address" type = "text" name="address" class = 'form-control' value="{{ current_addr }}" placeholder="Enter your address"></textarea>
              </div>
              <input type = "submit" value="Submit" class = "btn btn-success" style="font-size:18px;" />
            </form>

这是我的第二个表单,当我点击&#34;编辑&#34;我的模板上的按钮。当我点击&#34;更新&#34;显示按钮csrf令牌验证失败。

        <form action="{% url 'studentapp:editrow' rowid=id %}" id="editform" method="POST">
          {% csrf_token %}
          <div class = "form-group">
            <label for = "your_name">
              Your name:
            </label>
            <input class = "form-control" id="new_name" type = "text" name="name" value="{{ student_detail.name }}" placeholder="Enter your name">
          </div>
          <div class="form-group">
            <label for = "course_name">
              Course:
            </label>
            <input id="new_course" class = 'form-control' type = "text" name="course" value="{{ student_detail.course }}" placeholder="Enter your course">
          </div>
          <div class = "form-group">
            <label for = "rollno">
              Roll No.:
            </label>
            <input id="new_rollno" type = "text" class = 'form-control' name="roll" value="{{ student_detail.roll }}" placeholder="Enter your roll number">
          </div>
          <div class = "form-group">
            <label for ="addr">
              Address:
            </label>
            <input id="new_address" type = "text" name="address" class = 'form-control' value="{{ student_detail.address }}" placeholder="Enter your address"/>
          </div>
          <input type = "submit" value="Update" id="update" class = "btn btn-success" style="font-size:18px;" />
        </form>
      </div>
    </div>
  </div>
</div>

这是我的ajax请求:

function update_entry(id) {
  var id = id
  $.ajax({
      url: "{% url 'studentapp:index' %}",
      type: "POST",
      data:{
          'csrfmiddlewaretoken': '{{ csrf_token }}',
          'id' : id,
      },
      success: function(response){
          $(".response").html(response.template)
          $("#editform").modal("show");
      }
  });
}

function update_property(id) {
  window.location.replace("/studentapp/editrow" + id+"/");
}

1 个答案:

答案 0 :(得分:0)

由于我使用了两种不同的表单,因此我使用了两个CSRF令牌。删除一个令牌并没有解决问题所以我只是这样做了:

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

在我的一个表单中,并在索引视图中添加了这两行:

if request.is_ajax():
    #Your Code
    csrf_token = request.POST['csrfmiddlewaretoken']
    response = {}
    response['status'] = False
    student_detail = #Your Model name

    context = {
        "Your dictionary"
        "csrf_token": csrf_token
    }

它对我来说很合适。