Differences between revisions 23 and 24
Revision 23 as of 2006-03-30 09:56:48
Size: 8477
Editor: 211
Comment:
Revision 24 as of 2006-03-30 10:08:02
Size: 8700
Editor: 211
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

TableOfContents

이 문서는 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 파일을 열고, 파일 안에 다음 파이썬 코드를 적자:

   1 from django.utils.httpwrappers import HttpResponse
   2 
   3 def index(request):
   4     return HttpResponse("Hello, world. You're at the poll index.")

이것은 사용하기에 가장 간단한 보기이다. "/polls/"로 가면, 당신이 작성한 문서를 볼 것이다.

이제 다음 보기를 추가하자. 그것은 인수를 가지고 있기 때문에 약간 다르다 (which, remember, is passed in from whatever was captured by the regular expression in the URLconf):

   1 def detail(request, poll_id):
   2     return HttpResponse("You're looking at poll %s." % poll_id)

당신의 브라우저에서 "/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

Decoupling the URLconfs

Django/Tutorial3 (last edited 2011-08-03 11:00:46 by localhost)

web biohackers.net