2017-12-20 25 views
1

장고를 처음 사용하고 CSRF 확인에 문제가 있습니다. 지금까지 Django POST 양식을 성공적으로 작성했으며 CSRF 오류가 없습니다. 그러나 다음 양식을 만들려고 할 때 CSRF 확인 실패 : "CSRF 토큰 누락 또는 부정확"이 표시됩니다.장고 CSRF 확인 실패

다음
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 요청을 처리하는 코드를 추가하지 않은)처럼 그 양식에 대한보기 기능이 모습입니다 : 여기

{% 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 %} 

는 모델처럼 보이는 것입니다 :

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) 

기본적으로 각 질문마다 여러 답변이 있습니다. 사용자가 특정 답변과 연결된 버튼을 클릭 할 수있게하려고합니다. 사용자가 버튼을 클릭하면 데이터베이스에서 해당 답변에 대한 투표를 늘리고 싶습니다. 아직 코드를 추가하지 않았지만 이것이 목표입니다. 그런 다음 새로 추가 된 투표로 페이지를 다시로드하길 원합니다.

Here is just an example of what this looks like visually

는 아무도 내가 잘못 일을 오전 또는 내가 무엇을 놓치고 무엇을 알고 있나요?

감사합니다.

답변

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> 
+0

안녕하세요, 당신의 응답을 주셔서 감사합니다. 예, 나는 그것을 시도하고 동일한 오류가 발생합니다. – km786

+0

페이지를 새로 고쳤습니까? –

+0

이것은 기본적으로 정확합니다. 위의 코드는 위에 몇 가지 문제가 있습니다. 먼저 CSRF 토큰의 유효성을 검사 할 수있는 파이썬 양식이 없으며 둘째로 많은 양식이 있습니다 (루프 내부에 양식 태그가 있으므로). 이 방법으로는 작동하지 않습니다. glitches를 해결하기 위해 HTML에서 하나의 양식 만 필요로하는 적절한 파이썬 양식을 작성하십시오. – dahrens