Django CSRF验证失败

问题描述 投票:1回答:1

我是Django的新手,我在CSRF验证方面遇到了问题。到目前为止,我已经创建了成功且没有CSRF错误的Django POST表单。但是当我尝试创建以下表单时,我得到CSRF验证失败:“CSRF令牌丢失或不正确”。

{% for a in answers %}
    {% csrf_token %}
    <form class="" action="." method="post">
        <input type="submit" value="{{ a.answer }}" name={{a.answer_id}}></input>
    </form>
    <p>Number of votes: {{ a.votes }}</p>
{% empty %}
    <p>There are no answers for the poll</p>
{% endfor %}

这是模型的样子:

class Question(models.Model):
    date_added = models.DateTimeField(auto_now_add=True)
    question = models.CharField(max_length=200)
    number_of_answers = models.IntegerField(default=0)

class Answer(models.Model):
    question = models.ForeignKey(Question)
    answer = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

以下是该表单的视图函数的样子(到目前为止,我还没有添加任何代码来处理post请求):

def poll(request, question_id):
    if request.method == "POST":
        pass
    poll = Question.objects.get(id=question_id)
    answers = poll.answer_set.order_by()
    context = {'poll' : poll, 'answers' : answers}
    return render(request, 'polls/poll.html', context)

基本上,每个问题都有多个答案。我想允许用户单击与特定答案关联的按钮。一旦用户单击一个按钮,我想在数据库中增加对该答案的投票(我还没有添加代码来执行此操作,但这是目标)。然后,我希望使用新添加的投票重新加载页面。

有人知道我做错了什么或我错过了什么?

谢谢!

python django forms csrf django-csrf
1个回答
3
投票

csrf令牌进入表单内:

<form class="" action="." method="post">
 {% csrf_token %} <!--here goes the token-->
    <input type="submit" value="{{ a.answer }}" name={{a.answer_id}}></input>
</form>
© www.soinside.com 2019 - 2024. All rights reserved.