django 06. 두번째 장고앱 10 - POST 처리
06 Mar 2017 | python 파이썬 Django formdjango 06. 두번째 장고앱 10 - POST 처리
- POST 폼을 처리할 vote 페이지를 작성한다.
- form의 action 값은 vote 페이지로 설정되어 있다.
<form action="{% url 'polls:vote' question.id %}" method="POST">
- views.py 의 vote 함수가 POST 처리 할 수 있도록 수정한다.
question.choice_set.get(pk = request.POST['choice'])
를 통해서 POST form에서 선택된 라디오 버튼의value
값을 가져올 수 있다.- 예외 처리를 통해서 올바르지 않은 라디오 버튼을 선택시 error_message를 전달한다.
- 예외 처리에서 문제가 없으면 .save()를 통해 업데이트 한다.
- vote 페이지가 POST를 처리하고 나면
return redirect('polls:results', question_id = question.id)
를 통해 result 페이지로 이동시킨다.
def vote(request, question_id): #POST를 처리할 수 있도록 작성한다.
question = get_object_or_404(Question, pk = question_id)
try:
# POST form에서 'choice' name 값을 갖는 input의 value 값을 가져온다.
selected_choice = question.choice_set.get(pk = request.POST['choice'])
except:
return render(request, 'polls/detail.html', {
'question' : question,
'error_message' : "You didn't select a choice"
})
else:
selected_choice.votes += 1
selected_choice.save()
return redirect('polls:results', question_id = question.id)