Korean translation of http://www.djangoproject.com/documentation/tutorial3
<-- |
[../Tutorial2] |
[../Tutorial4] |
--> |
당신의 첫번째 장고 프로그램 만들기, part 3
이 문서는 Django 0.9.1을 다룬다. 구버전 : 0.90 docs
By Adrian Holovaty <holovaty@gmail.com>, Translated by [parkpro77]
튜토리얼 2를 끝마치면 이 튜토리얼을 시작한다. 우리는 웹 투표 프로그램을 계속 만들것이고, 공개화면 (public interface)를 만드는 데 주력할 것이다 -- "보기 (views)"
원리
보기 (view)는 일반적으로 특별한 기능을 제공하는 장고 프로그램에서 웹 페이지의 "형태"이고, 특별한 템플릿을 가진다. 예를 들어, 웹블로그 프로그램에서, 당신은 다음 보기들을 가질지도 모른다:
- Blog homepage -- 최근 소수의 입장을 보여준다.
- Entry "detail" page -- 개인 입장 (single entry)을 위한 불변링크 (permalink).
- Year-based archive page -- 입장객들에 대한 주어진 해에 모든 달을 보여준다.
- Day-based archive page -- 주어진 날에 모든 입장객들을 보여준다.
- Comment action -- 주어진 입장에 알리는 주석들 (posting comments)을 처리한다.
투표 프로그램에서, 우리는 다음 네가지 보기를 가질 것이다:
- Poll "archive" page -- 최근 소수의 투표를 보여준다.
- Poll "detail" page -- 결과는 없지만 투표하는 형태를 가진 투표 질문 (poll question)을 보여준다.
- Poll "results" page -- 특별한 투표에 대한 결과를 보여준다.
- Vote action -- 특별한 투표에서 특별한 선택을 하기 위한 투표를 처리한다.
장고에서, 각 보기는 간단한 파이썬 기능에 의해 표현되어졌다.
URL들을 만들기
보기들을 쓰는 첫번째 단계는 당신의 URL 구조를 만드는 것이다. URL 구조는 URLconf로 불려지는 파이썬 모듈을 만드는 것이다. URLconfs 는 장고가 어떻게 주어진 파이썬 코드와 주어진 URL을 결합시키는가 하는 것이다.
사용자가 장고 페이지를 요청했을 때, 파이썬의 점으로 된 문법 (Python dotted syntax)에 문자열을 포함하는 ROOT_URLCONF 구성을 시스템에서 본다. 장고는 모듈을 적재하고, 다음 형식에서 튜플들의 연속인 urlpatterns 라 불려지는 다양한 모듈 단계를 찾는다:
1 (regular expression, Python callback function [, optional dictionary])
장고는 첫 일상적인 표현을 시작하고, 그것이 적합한 하나를 찾을 때까지, 각 일상적인 표현에 대한 요청된 URL을 비교하는 목록 아래 그것의 방법을 만든다.
그것이 서로 맞는것을 찾을 때, 장고는 첫 인수로서 HTTPRequest 객체와 함께 파이썬 회수 (callback)기능을 호출하고, 키워드 인수로서 일상적인 표현으로부터 어떤 "입력된 (captued)"값을 호출하고, 선택적으로, 디렉토리 (튜플에서 부가적인 세번째 항목)로부터 임의의 키워드 인수들을 호출한다.
HTTPRequest 객체에 대해 더 알고 싶다면, [http://www.djangoproject.com/documentation/request_response/ request and response documentation]을 보아라. URLconfs에 대해 알고 싶으면, [http://www.djangoproject.com/documentation/url_dispatch/ URLconf documentation]을 보면 된다.
튜토리얼1의 시작에서 python manage.py startproject myproject 를 실행했을 때, 그것은 myproject/urls.py 에 초기설정으로 URLconf를 만들었다. 또한, 그 파일을 지목하기 위해 ROOT_URLCONF 를 구성했다:
1 ROOT_URLCONF = 'myproject.urls'
이제는 예제. myproject/urls.py 를 이와 같이 편집하라:
1 from django.conf.urls.defaults import *
2
3 urlpatterns = patterns('',
4 (r'^polls/$', 'myproject.polls.views.index'),
5 (r'^polls/(\d+)/$', 'myproject.polls.views.detail'),
6 (r'^polls/(\d+)/results/$', 'myproject.polls.views.results'),
7 (r'^polls/(\d+)/vote/$', 'myproject.polls.views.vote'),
8 )
이것은 재검토 해볼만하다. 누군가가 당신의 웹 싸이트 페이지를 요청할 때 -- "/polls/23/"을 말하는, 장고는 이 파이썬 모듈을 적재할 것이다. 왜냐하면, 그것은 ROOT_URLCONF 구성에 의해 지목되어졌기 때문이다. 그것은 다양하게 이름지어진 urlpatterns 를 찾고, 순서에 따라 일상적인 표현은 통과한다. 그것이 일상적인 표현을 찾을 때, --r'^polls/(\d+)/$'-- 과 들어 맞게 되고, 결합되어진 파이썬 package/module 을 적재한다: myproject.polls.views.detail. 그것은 myproject/polls/views.py 안에 detail() 기능과 일치한다. 결국엔, 이와 같이 detail() 기능을 호출한다:
1 detail(request=<HttpRequest object>, poll_id='23')
poll_id='23' 은 (\d+)으로부터 나온다. 형태에 의해 들어맞는 본문인 "입력 (captures)" 형태 주위에 괄호를 사용하고, 보기 기능에서 인수로서 그것을 보내라.
URL 형태들은 일반적인 표현들이기 때문에, 그것들과 함께 무엇을 할 수 있는지에 대한 제한이 없다. 그리고, .php 같이 URL cruft 를 추가하는 것이 필요하지 않다 -- 당신이 유머 감각을 가지고 있다면, 그런 경우에 이와 같은 것을 할 수 있다:
1 (r'^polls/latest\.php$', 'myproject.polls.views.index'),
하지만, 그렇게 하지 말아라. 그것은 어리석은 짓이다.
이런 일반적인 표현들은 GET and POST 변수들이나 도메인 이름을 조사하지 않는다. 예를 들면, http://www.example.com/myapp/ 요청에서 URLconf는 /myapp/를 찾을 것이다. http://www.example.com/myapp/?page=3 요청 또한 /myapp/를 찾을 것이다.
일반적인 표현들에 대한 도움이 필요하다면, [http://en.wikipedia.org/wiki/Regular_expression Wikipedia's entry]와 [http://www.python.org/doc/current/lib/module-re.html Python documentation]을 보아라. Jeffrey Friedl 의
Write your first view
Write views that actually do something
A shortcut: render_to_response()
Raising 404
A shortcut: get_object_or_404()
Write a 404 (page not found) view
Write a 500 (server error) view
Use the template system
Simplifying the URLconfs