Differences between revisions 17 and 19 (spanning 2 versions)
Revision 17 as of 2006-03-29 17:56:59
Size: 6816
Editor: 211
Comment:
Revision 19 as of 2006-03-29 18:09:55
Size: 6986
Editor: 211
Comment:
Deletions are marked like this. Additions are marked like this.
Line 46: Line 46:
그것이 서로 맞는것을 찾을 때, 장고는 첫 인수로서 HTTPRequest 객체와 함께 파이썬 회수 (callback)기능을 호출하고, 키워드 인수로서 규칙적인 표현으로부터 어떤 "입력된 (captued)"값을 호출하고, 선택적으로, 디렉토리 (튜플에서 부가적인 세번째 항목)로부터 임의의 키워드 인수들을 호출한다. 그것이 서로 맞는것을 찾을 때, 장고는 첫 인수로서 HTTPRequest 객체와 함께 파이썬 회수 (callback)기능을 호출하고, 키워드 인수로서 규칙적인 표현으로부터 어떤 "입력된 (captued)"값을 호출하고, 선택적으로, 디렉토리 (튜플에서 선택적인 세번째 항목)로부터 임의의 키워드 인수들을 호출한다.
Line 93: Line 93:
우리는 아직 어떤 보기 (views)도 만들지 않았었다 -- 단지 URLconf만 가지고 있다. 장고가 다음과 같은 URLconf인지 확인해 보자.


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인지 확인해 보자.

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

Decoupling the URLconfs

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

web biohackers.net