Получение отсутствия CSRF-токена при отправке данных формы в django
Я получаю ошибку CSRF token missing каждый раз при отправке формы, указанной ниже. В чем может быть проблема? Ниже приведен код моего файла views.py :
*all imports are here
# Create your views here.
def takeExam(request, pk):
mock = MockTest.objects.get(id=pk)
context = {
'mock':mock,
}
return render(request, "exam/take-exam.html", context)
@login_required(login_url='login')
def startExam(request,pk):
mock=MockTest.objects.get(id=pk)
questions=Question.objects.all().filter(test=mock)
if request.method=='POST':
pass
response= render(request,'exam/start_exam.html',{'mock':mock,'questions':questions})
response.set_cookie('mock_id',mock.id)
return response
@login_required(login_url='login')
def calculateMarks(request):
if request.COOKIES.get('mock_id') is not None:
mock_id = request.COOKIES.get('mock_id')
mock=MockTest.objects.get(id=mock_id)
total_marks=0
questions=Question.objects.all().filter(course=mock)
for i in range(len(questions)):
selected_ans = request.COOKIES.get(str(i+1))
actual_answer = questions[i].answer
if selected_ans == actual_answer:
total_marks = total_marks + questions[i].marks
std = student.CustomUser.objects.get(user_id=request.user.id)
result = Result()
result.marks=total_marks
result.exam=mock
result.student=std
result.save()
return HttpResponseRedirect('view-result')
@login_required(login_url='login')
def resultViews(request):
mocks=MockTest.objects.all()
return render(request,'exam/view_result.html',{'mocks':mocks})
@login_required(login_url='studentlogin')
def checkMark(request,pk):
mock=MockTest.objects.get(id=pk)
std = student.CustomUser.objects.get(user_id=request.user.id)
results= Result.objects.all().filter(exam=mock).filter(student=std)
return render(request,'exam/check_marks.html',{'results':results})
@login_required(login_url='studentlogin')
def studentMark(request):
mocks=MockTest.objects.all()
return render(request,'exam/student_marks.html',{'courses':mocks})
Мой html файл:
{% extends 'main.html' %} {% block content %} {%load static%}
<div
class="jumbotron my-2 py-4"
onmousedown="return false"
onselectstart="return False"
>
<h1 style="text-align: center">{{mock.name}}</h1>
<form
class="form my-2"
autocomplete="off"
onsubmit="saveAns()"
action="{% url 'calculate-marks' %}"
method="POST"
>
{% csrf_token %} {% for q in questions%} {% if q.question %}
<div class="text-danger my-3 font-weight-bold">
{{ forloop.counter }}. {% endif %} {% if q.imgQuestion %}
<img src="{{q.imgQuestion.url}}" alt="imgQuestion" />
{% elif q.question%} {{q.question}} {% endif %}
</div>
<input
type="hidden"
name="csrfmiddlewaretoken"
value="vvPrLLUzLnzQZeMf33zg7IYh8BGzbJCPzG2O4E7kqIJ7b0FHHNMjhdCifp1GVguF"
/>
<div class="form-check mx-4">
<input
class="form-check-input"
type="radio"
name="{{ forloop.counter }}"
id="{{q.option1}}"
value="Option1"
/>
<label class="form-check-label" for="option1"> {{q.option1}} </label>
</div>
<div class="form-check mx-4">
<input
class="form-check-input"
type="radio"
name="{{ forloop.counter }}"
id="{{q.option2}}"
value="Option2"
/>
<label class="form-check-label" for="option2"> {{q.option2}} </label>
</div>
<div class="form-check mx-4">
<input
class="form-check-input"
type="radio"
name="{{ forloop.counter }}"
id="{{q.option3}}"
value="Option3"
/>
<label class="form-check-label" for="option3"> {{q.option3}} </label>
</div>
<div class="form-check mx-4">
<input
class="form-check-input"
type="radio"
name="{{ forloop.counter }}"
id="{{q.option4}}"
value="Option4"
/>
<label class="form-check-label" for="option4"> {{q.option4}} </label>
</div>
{% endfor %}
<input class="btn btn-success my-3" type="submit" value="Submit" />
</form>
</div>
<script>
function saveAns() {
var ele = document.getElementsByTagName("input");
for (i = 0; i < ele.length; i++) {
if ((ele[i].type = "radio")) {
if (ele[i].checked) {
setCookie(ele[i].name, ele[i].value, 3);
}
}
}
}
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
</script>
{% endblock content %}
Я не могу понять, почему я получаю ошибку csrf missing при отправке этой формы! Я использовал токен в html и в других формах в том же приложении нет ошибки при отправке, но в этой форме я получаю ошибку. В чем может быть проблема?