Size: 8477
Comment:
|
Size: 8700
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 132: | Line 132: |
당신의 브라우저에서 "/polls/34/"로 접속해 보아라. URL에서 당신이 작성한 ID가 보여질 것이다. | |
Line 133: | Line 134: |
== 실질적인 작업을 수행하는 보기 작성하기 == | |
Line 134: | Line 136: |
== Write views that actually do something == | 각각의 보기는 두 가지 중에 하나를 수행하는 책임이 있다: |
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 의 O'Reilly의 책 "Mastering Regular Expressions" 또한 환상적이다.
마지막으로, 수행 기록 (performance note): 이런 규칙적인 표현들은 URLconf 모듈이 적재되었을 첫번째로 컴파일되어졌다. 그것들은 굉장히 빠르다.
당신의 첫번째 보기 작성하기
우리는 아직 어떤 보기 (views)도 만들지 않았었다 -- 단지 URLconf만 가지고 있다. 장고가 다음과 같은 URLconf인지 확인해 보자.
장고 개발 웹 서버를 가동하자:
1 python manage.py runserver
이제 "http://localhost:8000/polls/"로 가자. 다음 메세지와 같은 유쾌하게 색깔있는 오류 (pleasantly-colored error)를 얻게 될 것이다:
ViewDoesNotExist at /polls/ Tried index in module myproject.polls.views. Error was: 'module' object has no attribute 'index'
이 오류는 myproject/polls/views.py 모듈에서 index() 기능을 작성하지 않았기 때문에 나타났다.
"/polls/23/"과 "/polls/23/results/", "/polls/23/vote/"를 시험해 보자. 에러 메세지는 장고가 시도했던 것을 보여준다 (아직 어떤 보기도 작성하지 않았기 때문에 검색은 실패했다.).
첫번째 보기를 작성하는 시간. myproject/polls/views 파일을 열고, 파일 안에 다음 파이썬 코드를 적자:
이것은 사용하기에 가장 간단한 보기이다. "/polls/"로 가면, 당신이 작성한 문서를 볼 것이다.
이제 다음 보기를 추가하자. 그것은 인수를 가지고 있기 때문에 약간 다르다 (which, remember, is passed in from whatever was captured by the regular expression in the URLconf):
당신의 브라우저에서 "/polls/34/"로 접속해 보아라. URL에서 당신이 작성한 ID가 보여질 것이다.
실질적인 작업을 수행하는 보기 작성하기
각각의 보기는 두 가지 중에 하나를 수행하는 책임이 있다:
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