繁体   English   中英

CSRF 验证失败。 请求中止。 没有表格

[英]CSRF verification failed. Request aborted. No Form

当我使用 ajax/jquery 调用我的 js function 时,我收到“CSRF 验证失败。请求中止”网络错误。 据我了解,这通常与 forms 相关联,但我的这段代码中没有任何 forms。 我尝试将{% csrf_token %}添加到我的按钮,但没有做任何事情。 我会很感激任何帮助。 谢谢!

modCalc.html

{% extends 'base.html' %}

{% block title %}Modulo Calculator{% endblock %}

{% block content %}
{% block nav-modCalc %}<a href="#" class='active'>Modulo Calculator</a>{% endblock %}
<div class='main'>
{% if user.is_authenticated %}
    <div class='leftAndRight'>
      <p id='highscore' class='highscore'>Highscore: {{ user.highscore }}</p>
      <p id='timer' class='timer'>0:00</p>
    </div>
    <br />
    <br />
    <div class="center">
      <p id='level' class='level'>Level 1</p>
    </div>
    <div class="center">
      <button onclick='generateNums();' id='generate' class='generate'>Generate Problem</button>
    </div>
    <div class='formulaDiv'>
      <span class='formula'><p id='num1' class='num'></p></span> 
      <span class='formula'><p class='symbol'>%</p></span> 
      <span class='formula'><p id='num2' class='num'></p></span>
      <span class='formula'><p class='symbol'>=</p></span> 
      <span class='formula'><input type='number' id='answer' class='answer'></input></span>
    </div>
    <p id='required' class='required'></p>
    <div class='center'>
      <button onclick='checkAnswer();' id='grade' class='grade' disabled>Grade</button>
    </div>
    <div class='leftAndRight'>
      <p id='results' class='results'></p>
      <p id='inRow' class='inRow'></p>
    </div>
    

{% else %}
  <p>You are not logged in</p>
{% endif %}
</div>
{% endblock %}

modCalc.js

...
function checkAnswer(){
    if(document.getElementById('answer').value != ""){
        if(num1 % num2 === parseInt(document.getElementById('answer').value)){
            inRow++;
            if(inRow > highscore){
                highscore = inRow;
                document.getElementById("highscore").innerHTML = "Highscore: " + highscore;
                $.ajax({
                    url: siteURL + 'accounts/update_highscore/',
                    data: {'highscore': highscore},
                    type: 'POST'
                  }).done(function(response){
                    console.log(response);
                  });
            }
            document.getElementById('results').innerHTML = "Correct!";
        }
        else{
            document.getElementById('results').innerHTML = "Oops...The right answer was: " + num1 + " % " + num2 + " = " + (num1 % num2);
            document.getElementById('answer').value = "";
            inRow = 0;
        }
        document.getElementById('inRow').innerHTML = inRow + " correct in a row";
        level = Math.floor(inRow / 10) + 1;
        document.getElementById('level').innerHTML = "Level " + level;
        clearInterval(timer);
        document.getElementById('timer').innerHTML = "0:00";
        document.getElementById("generate").disabled = false;
        document.getElementById('grade').disabled = true;
        document.getElementById('answer').value = "";
        document.getElementById("num1").innerHTML = "";
        document.getElementById("num2").innerHTML = "";

    }
    else{
        document.getElementById('required').innerHTML = "Please enter an answer";
    }
    
}
...

视图.py

from .forms import CustomUserCreationForm
from django.urls import reverse_lazy
from django.views import generic
from django.http import HttpResponse
from .models import CustomUser

class SignUp(generic.CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'

def update_highscore(request):
    if request.method == 'POST':
        user = CustomUser.objects.get()
        user.highscore =  request.POST['highscore']
        user.save()
        message = 'update successful'
    return HttpResponse(message)

网址.py

from django.urls import path
from django.conf.urls import url
from .views import update_highscore

from . import views


urlpatterns = [
    path('signup/', views.SignUp.as_view(), name='signup'),
    url(r'^update_highscore/', update_highscore)
]

您必须 append method = POST到您的按钮,然后它将为您工作,就像您使用的那样

if request.method == 'POST': 

在你看来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM