我的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+"/");
}
答案 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
}
它对我来说很合适。