Size: 3419
Comment:
|
Size: 3977
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 43: | Line 43: |
{{#!python | {{{#!python |
Line 68: | Line 68: |
* | * request.POST 는 키 이름에 의해 전송된 데이타가 접근하는 형식의 사전과 비슷한 객체이다. 이 경우에, request.POST['choice'] 는 문자로서 선택된 choice의 ID를 되돌린다. request.POST 값은 항상 문자열들이다. 같은 방법으로 GET 데이타에 접근하기 위해서 장고는 request.GET 을 제공한다 -- 그러나, 데이타가 오직 POST 호출을 경유해서 바뀐다는 것을 확실하게 하기 위해서 우리는 코드에서 명백하게 request.POST 를 사용하고 있다. * |
Korean translation of http://www.djangoproject.com/documentation/tutorial4
<-- |
[../Tutorial3] |
[../Tutorial1] |
--> |
당신의 첫번째 장고 프로그램 만들기, part 4
이 문서는 Django 0.9.1을 다룬다. 구버전 : 0.90 docs
By Adrian Holovaty <holovaty@gmail.com>, Translated by [parkpro77]
간단한 형태 작성하기
마지막 튜토리얼로부터 투표 세부 템플릿 (poll detail template)을 업데이트하고 나서, 템플릿에 HTML <form> 요소를 포함하자:
<h1>{{ poll.question }}</h1> {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} <form action="/polls/{{ poll.id }}/vote/" method="post"> {% for choice in poll.get_choice_list %} <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /> <label for="choice{{ forloop.counter }}">{{ choice.choice }}</label><br /> {% endfor %} <input type="submit" value="Vote" /> </form>
빠른 요약:
- 위의 주형은 각 투표 선택을 위한 라디오 버튼 (radio butten)을 보여준다. 각 라디오 버튼의 값은 투표 선택의 ID와 관련되어져 있다. 각 라디오 버튼의 이름은 "choice" 이다. 어떤 사람이 라디오 버튼 중 하나를 선택하고 그 형태를 전송할 때, 그것은 POST 데이타인 choice=3 을 보낼 것이다. 이것은 HTML Forms 101 이다.
우리는 /polls//vote/ 로 형태의 액션 (form's action)을 구성했고, method="post" 로 구성했다. (method="get" 과는 반대로서) method="post" 를 사용하는 것은 전송하는 행위가 서버 측의 데이타를 개조할 것이기 때문에 매우 중요하다. 서버 측의 데이타를 바꿔주는 형태를 만들때마다 method="post" 를 사용하라. 이 팁은 장고에게는 중요하지 않다; 그것은 단지 좋은 웹을 개발하는 행위일 뿐이다.
이제, 전송된 데이타를 처리하고, 어떤것을 하는 보기를 만들자. 튜토리얼3에서 이 라인이 포함되어진 URLconf를 만들었다는 것을 기억하라:
r'^polls/(?P<poll_id>\d+)/vote/$', 'myproject.polls.views.vote'),
그래서, myproject/polls/views.py 에서 vote() 기능을 만들자:
1 from django.core.extensions import get_object_or_404, render_to_response
2 from django.models.polls import choices, polls
3 from django.utils.httpwrappers import HttpResponseRedirect
4
5 def vote(request, poll_id):
6 p = get_object_or_404(polls, pk=poll_id)
7 try:
8 selected_choice = p.get_choice(pk=request.POST['choice'])
9 except (KeyError, choices.ChoiceDoesNotExist):
10 # Redisplay the poll voting form.
11 return render_to_response('polls/detail', {
12 'poll': p,
13 'error_message': "You didn't select a choice.",
14 })
15 else:
16 selected_choice.votes += 1
17 selected_choice.save()
18 # Always return an HttpResponseRedirect after successfully dealing
19 # with POST data. This prevents data from being posted twice if a
20 # user hits the Back button.
21 return HttpResponseRedirect('/polls/%s/results/' % p.id)
이 코드는 우리가 이 튜토리얼에서 아직 적용해보지 못했던 몇 가지를 포함한다:
- request.POST 는 키 이름에 의해 전송된 데이타가 접근하는 형식의 사전과 비슷한 객체이다. 이 경우에, request.POST['choice'] 는 문자로서 선택된 choice의 ID를 되돌린다. request.POST 값은 항상 문자열들이다. 같은 방법으로 GET 데이타에 접근하기 위해서 장고는 request.GET 을 제공한다 -- 그러나, 데이타가 오직 POST 호출을 경유해서 바뀐다는 것을 확실하게 하기 위해서 우리는 코드에서 명백하게 request.POST 를 사용하고 있다.
Use generic views: Less code is better