Differences between revisions 56 and 57
Revision 56 as of 2006-03-27 10:10:57
Size: 15802
Editor: 211
Comment:
Revision 57 as of 2006-03-27 10:35:34
Size: 16095
Editor: 211
Comment:
Deletions are marked like this. Additions are marked like this.
Line 261: Line 261:
== Playing with the API == == API 가지고 놀기 ==

지금, 서로 작용하는 파이썬 쉘로 일에 착수하고, 장고에 있는 공짜 API를 가지고 놀자. 파이썬 쉘을 구하기 위해 이 명령을 사용하라.

{{{
python manage.py shell
}}}

manage.py 는 프로젝트의 환경을 구성하기 때문에 간단한

Korean translation of http://www.djangoproject.com/documentation/tutorial1

당신의 첫번째 장고 프로그램 만들기, part 1

TableOfContents

이 문서는 Django 0.9.1을 다룬다. 구버전 : 0.90 docs

By Adrian Holovaty <holovaty@gmail.com>, Translated by [parkpro77]

예제로 배워보자.

이 듀토리얼을 통해서 우리는 당신에게 간단한 웹 투표 프로그램을 만드는 것을 알려줄 것이다.

웹 투표 프로그램은 두 부분으로 구성된다.

  • 사람들이 투표를 제안하고 투표의 결과를 보게 하는 공식 페이지
  • 당신이 비밀리에 투표를 추가하고, 바꾸고, 삭제하는 관리자 페이지

우리는 당신이 이미 장고를 설치했다고 가정한다.

초기설정

당신이 장고를 처음 사용하는 것이라면, 당신은 몇몇 초기설정에 주의해야 한다.

django-admin.py startproject myproject 명령을 실행하라. 그것은 당신의 현재 디렉토리에 myproject 디렉토리를 만들 것이다.

(만약 당신이 setup.py를 통해 장고를 설치했다면, django-admin.py는 당신의 시스템 경로에 있을 것이다. 만약 당신의 경로가 아니라면, 당신은 site-packages/django/bin 에서 그것을 찾을 수 있다. ; /usr/local/bin처럼 당신의 경로에 어떤 장소로부터 그것의 심볼릭 링크를 고려하라.)

{{| 이 코드가 어디에 있습니까?

당신의 배경이 [PHP]라면, 당신은 웹서버의 document root 아래 아마도 코드가 있을 것이다 (/var/www 같은 장소에). 장고와 함께, 당신은 그것을 하지 마라. 당신의 웹서버의 document root 내에 이 파이썬 코드가 약간이라도 있는 것은 좋지 않다. 왜냐하면 그것은 사람들이 웹에서 당신의 코드를 볼지도 모르는 가능성을 감수해야 하기 때문이다. 그것은 보안상 좋지 않다.

당신의 코드를 /home/mycode 같이 document root의 바깥 디렉토리에 두어라. |}}

프로젝트는 데이타베이스 구성, 장고의 특별한 옵션, 프로그램의 특별한 설정을 포함하는 장고의 실례를 위한 설정의 모음이다.

myproject/
    __init__.py
    manage.py
    settings.py
    urls.py

이 파일들은 :

  • manage.py : 다양한 방식에서 장고 프로젝트와 상호작용하는 명령어 라인 프로그램.
  • settings.py : 장고 프로젝트를 위한 설정/구성
  • urls.py : 장고 프로젝트를 위한 URL 선언; 당신이 만든 장고 사이트의 "목차"

개발 서버

만약 당신이 가지고 있지 않다면, myproject 디렉토리로 가서, python manage.py runserver 명령을 실행하라. 당신은 명령어 라인에서 다음과 같은 출력을 보게 될 것이다.

Validating models...
0 errors found.

Starting server on port 8000 with settings module 'myproject.settings'.
Go to http://127.0.0.1:8000/ for Django.
Quit the server with CONTROL-C (Unix) or CTRL-BREAK (Windows).

(만약 당신이 DATABASE_ENGINE에 대한 에러를 얻는다면, 정확한 데이타베이스를 찾아주기위해 DATABASE_ENGINE을 바꿔서 당신의 settings.py파일을 고치고, PostgreSql's psycopg 이나 MySql's MySqlDb 같은 설치 되어진 올바른 데이타베이스 라이브러리를 가져라.)

당신은 파이썬의 표준 라이브러리에 포함되어진 BaseHTTPServer를 만드는 장고 개발 서버, 표준이하이거나 단순한 파이썬 웹서버를 시작했다. 우리는 장고에 이런것들을 포함했다. 그래서 당신은 제작할 준비가 될때까지 구성하는 [Apache]를 처리하지 않아도 빠르게 이런것을 개발할 수 있다.

어떤것이라도 공통점이 있는 제작환경에서 이 서버를 사용하지 마라. 그것은 오직 개발하는 동안만 사용하기위해 의도된 것이다.

{{| 포트를 바꿔라

초기설정에 의해, runserver 명령은 포트 8000에서 개발을 시작한다. 당신이 서버의 포트를 바꾸길 원한다면, 그것을 명령어 라인 인수로서 바꿔라.

python manage.py runserver 8080

|}}

지금, 서버가 돌고 있는 상태에서, 당신의 웹브라우저를 통해 http://127.0.0.1:8000/ 을 방문하라. 당신은 연한 파란 색조의 산뜻한 "Welcome to Django"라는 페이지를 볼 것이다. 작업이 완료되었다!

데이타베이스 설정

지금, settings.py를 고쳐라. 그것은 모듈 수준에서 다양하게 표현되어지는 장고 설정을 따르는 평범한 파이썬 모듈이다. 당신의 데이타베이스 연결 변수에 맞게 이 설정들을 바꿔라 :

  • DATABASE_ENGINE -- 'postgresql', 'mysql' 또는 'sqlite3'. 곧 더 나온다.
  • DATABASE_NAME -- 당신의 데이타베이스 이름, 만약 당신이 [Sqlite]를 사용한다면, 데이타베이스 파일의 완전한 경로
  • DATABASE_USER -- 당신의 데이타베이스 유저네임 (SQLite는 사용 안한다.)
  • DATABASE_PASSWORD -- 당신의 데이타베이스 패스워드 (SQLite는 사용 안한다.)
  • DATABASE_HOST -- The host your database is on. 만약 당신의 데이타베이스 서버가 같은 물리적인 기계를 사용한다면, 이것을 빈 문자열로 남겨라 (SQLite는 사용 안한다.)

{{| 주의

여기에서 지정한 데이타베이스가 PostgreSQL 또는 MySQL 에 생성되어있어야 한다. 당신이 사용하는 데이타베이스의 프롬프트에서 "CREATE DATABASE database_name;" 명령어로 데이터베이스를 만들 수 있다. |}}

당신의 데이터베이스에 장고의 코어 데이타베이스 테이블을 생성하기 위해서 다음 명령을 실행하라.

python manage.py init

당신이 어떤 에러 메세지도 보지 못한다면, 작업이 완료 된것이다.

궁금하다면, 당신의 데이타베이스를 위한 명령행 클라이언트를 띄워서 \dt (PostgreSQL), SHOW TABLES; (MySQL), or .schema (SQLite) 같은 명령어를 입력해서 장고에 의해서 생성된 테이블들을 볼 수 있다.

{{| 이 데이터베이스 테이블들에 대해서

manage.py init 에 의해서 생성된 테이블들은 장고가 제공하는 세션, 인증등의 기능을 위해서 필요한 것들이다. 장고의 다음 릴리즈에서는 당신이 원하지 않는다면 어떤 테이블도 생성하지 않는 init 명령어의 간단한 형식이 제공 될 것이다. |}}

모델 만들기

지금, 당신의 project는 정해졌고, 작업을 할 준비가 되어있다.(당신은 다시 지루한 관리상의 도구를 신경쓰지 않아도 될 것이다.)

당신이 장고에서 쓰고 있는 각각의 프로그램은 파이썬 경로 어딘가에 있는 파이썬 패키지로 구성되고, 확실한 협정을 따른다. 장고는 프로그램의 기본적인 디렉토리 구조에서 자동으로 발생하는 유틸리티를 따른다. 그래서 당신은 창작하는 디렉토리 보다는 쓰고 있는 코드에 초점을 맞출 수 있다.

{{| 프로젝트 vs. 프로그램

프로젝트와 프로그램의 다른 점은 무엇인가? 프로그램은 예를 들면 웹블로그 시스템이나 공적인 기록의 데이타베이스, 간단한 투표 프로그램 같은 것들을 하는 웹 프로그램이다. 프로젝트는 시스템 구성과 특별한 웹 싸이트를 위한 프로그램의 모음이다. 프로젝트는 다수의 프로그램들을 포함할 수 있다. 프로그램은 다수의 프로젝트들 안에 존재할 수 있다. |}}

이 튜토리얼에서 우리는 간단하게 myproject 디렉토리 안에 투표 프로그램을 만들 것이다. 결과적으로, 프로그램은 프로젝트와 연결될 것이다. 말하자면, 투표 프로그램 내에 파이썬 코드는 myproject.polls를 참조할 것이다. 나중에 이 튜토리얼에서, 우리는 배포를 위해서 당신의 프로그램을 분리하는 것을 검토할 것이다.

프로그램을 만들기 위해서, myproject 디렉토리 안에서 이 명령을 쳐라.

python manage.py startapp polls

이와 같은 표로 polls 디렉토리를 만들 것이다.

polls/
    __init__.py
    models/
        __init__.py
        polls.py
    views.py

이 디렉토리 구조는 투표 프로그램을 저장할 것이다.

장고에서 데이타베이스 웹 프로그램을 작성하는 첫 번째 단계는 당신의 모델을 정의하는 것이다. -- 본래는, 추가적인 metadata와 함께 당신의 데이타베이스 설계

{{| 원리

모델은 하나이고, 당신의 데이타에 대한 데이타의 명확한 소스이다. 그것은 본질적인 항목과 당신이 저장하고 있는 데이타의 상태를 포함한다. 장고는 [DRY] 원칙을 따른다. 목표는 한 장소에서 당신의 데이타 모델을 정의하고, 그것으로부터 자동적으로 얻어내는 것이다. |}}

간단한 투표 프로그램에서, 우리는 polls와 choices 두 개의 모델을 만들 것이다. poll은 질문과 공식적인 날짜를 가진다. choice는 choice의 본문과 투표 기록을 갖는다. 각각의 choice는 poll과 연관되어 있다.

이런한 개념들은 간단한 파이썬 클래스들에 의해 표현되어졌다. polls/models/polls.py 파일을 이와 같이 수정하라.

from django.core import meta

class Poll(meta.Model):
    question = meta.CharField(maxlength=200)
    pub_date = meta.DateTimeField('date published')

class Choice(meta.Model):
    poll = meta.ForeignKey(Poll)
    choice = meta.CharField(maxlength=200)
    votes = meta.IntegerField()

이 코드는 간단하다. 각 코드는 django.core.meta.Model을 세분화하는 클래스에 의해 표현되어졌다. 각 모델은 많은 클래스 변수와 모델에서 데이타베이스 항목을 표현하는 각각을 가진다.

각 항목은 meta.*Field 클래스의 인스턴스에 의해 표현되어졌다 -- 예를들면, 캐릭터 항목을 위한 meta.CharField 와 데이트타임을 위한 meta.DateTimeField. 이것은 장고가 각 항목의 데이타 형식이 무엇을 가지고 있는지 말해준다.

각 meta.*Field 인스턴스의 이름 (예를들면, question이나 pub_date)은 기계 친화적인 형태인 항목의 이름이다. 당신은 파이썬 코드에서 이 값을 사용할 것이고, 데이타베이스 또한 종 이름으로서 그것을 사용할 것이다.

당신은 사람이 읽을 수 있는 이름을 명명하기 위해 Field에 임의의 첫번째 자리 인수를 사용할 것이다. 그것은 장고의 몇 개의 내적인 부분에 사용되고, 문서와 일을 겸한다. 이 항목이 제공되어지지 않았다면, 장고는 기계가 읽을 수 있는 이름으로 사용될 것이다. 이 예로부터 우리는 Poll.pub_date를 위해서 사람들이 읽을 수 있는 이름을 정의했었다. 이 모델에서 다른 모든 항목들을 위해서, 항목의 기계가 읽을 수 있는 이름은 사람이 읽을 수 있는 이름으로서 충분할 것이다.

몇몇 meta.*Field 클래스들은 요소들을 필요로 했다. 예를 들어, meta.CharField는 maxlength가 필요하다. 그것은 데이타베이스 설계뿐만 아니라 증명에서도 사용했고, 곧 볼 수 있을 것이다.

결과적으로, meta.ForeignKey를 사용하면서 관계가 분명해졌다는 것에 주목하라. 장고의 각 Choice는 하나의 Poll과 연결되어졌다. 장고는 모든 평범한 데이타베이스 관계를 제공한다; 다수 대 하나, 다수 대 다수, 하나 대 하나.

모델 작동시키기

모델 코드의 작은 비트는 장고에게 많은 정보를 준다. 그것과 함께, 장고는 할 수 있다:

  • 이 프로그램을 위한 데이타베이스 설계하기 (CREATE TABLE 문들)
  • Poll과 Choice 객체들을 제어하기 위한 파이썬 데이타베이스-제어 API 만들기

그러나, 첫째로 우리는 polls 프로그램이 설치되어진 프로젝트가 필요하다.

{{| 원리

장고 프로그램은 '접속할 수 있는' 이다. 그것이 주어진 장고 설치에 의지하지 않기 때문에, 다중 프로젝트에서 프로그램을 사용할 수 있고, 할당할 수 있다. |}}

다시 settings.py 파일을 열어서, INSTALLED_APPS 위치에 'myproject.polls'를 삽입해라. 그러면, 이와 같이 보일 것이다.

INSTALLED_APPS = (
    'myproject.polls',
)

(콤마 쓰는 것을 잊지 마라, 왜냐하면 단독-값 튜플에 대한 파이썬의 규칙이기 때문이다. 콤마가 없다면, 파이썬은 이것이 튜플인지 알지 못한다.)

지금, myproject는 polls 프로그램을 포함하고 있다. 다른 명령을 실행해 보자.

python manage.py sql polls

다음과 같은 것을 보게 될 것이다. (polls 프로그램을 위한 CREATE TABLE SQL 문):

BEGIN;
CREATE TABLE "polls_polls" (
    "id" serial NOT NULL PRIMARY KEY,
    "question" varchar(200) NOT NULL,
    "pub_date" timestamp with time zone NOT NULL
);
CREATE TABLE "polls_choices" (
    "id" serial NOT NULL PRIMARY KEY,
    "poll_id" integer NOT NULL REFERENCES "polls_polls" ("id"),
    "choice" varchar(200) NOT NULL,
    "votes" integer NOT NULL
);
COMMIT;

다음을 주목하라:

  • 테이블 이름은 객체이름 (polls와 choices)의 복수 버전과 함께 프로그램 (polls)의 이름을 결합에 위해 자동적으로 생성되어졌다. (이것은 변경이 가능하다.)
  • Primary keys (IDs)는 자동적으로 추가되어졌다. (이것 역시 변경 가능하다.)
  • 장고는 협약에 의해 foreign key 항목 이름으로 "_id"를 추가하였다. 역시 변경 가능하다.
  • foreign key 관계는 REFERENCES 문에 의해 명료하게 만들어졌다.
  • 그것은 당신이 사용하는 데이타베이스 목적에 맞추었다. 그래서 auto_increment (MySQL)이나 serial (PostgreSQL), integer primary key (SQLite) 같은 특별한 항목 형식의 데이타베이스는 자동적으로 처리되어진다. 같은 것은 항목 이름의 인용부호를 쓰는 것으로 간주된다. -- 예를들면, 이중인용부호나 단일인용부호의 사용. 이 튜토리얼의 저자는 PostgreSQL을 실행하기 때문에 예제 출력은 PostgreSQL 문법으로 되어 있다.

관심이 있다면, 다음 명령들을 실행해 보라.

  • python manage.py sqlinitialdata polls -- 장고의 관리체제에 필요한 초기 데이타 삽입의 출력.
  • python manage.py sqlclear polls -- 이 프로그램을 위한 필수 DROP TABLE 문을 출력, 테이블들이 당신의 데이타베이스 안에 이미 존재한다는 것에 의해서 (가령 있다 할지라도).
  • python manage.py sqlindexes polls -- CREATE INDEX 문을 출력.
  • python manage.py sqlall polls -- 'sql' 과 'sqlinitialdata' 의 결합.

이런 명령들의 출력을 보면 실제적으로 무슨 일이 일어났는지 알 수 있을 것이다.

이제, 자동적으로 polls 프로그램의 데이타베이스 테이블들을 만들기 위해 이 명령을 실행하라.

python manage.py install polls

비밀리에 명령 수행의 모든 것은 python manage.py sqlall polls 의 출력을 가지고, 장고 settings 파일의 데이타베이스 안에서 그것을 실행한다.

manage.py 유틸리티가 무엇을 하는지 대한 정보를 알고 싶으면 django-admin.py documentation 를 읽어라.

API 가지고 놀기

지금, 서로 작용하는 파이썬 쉘로 일에 착수하고, 장고에 있는 공짜 API를 가지고 놀자. 파이썬 쉘을 구하기 위해 이 명령을 사용하라.

python manage.py shell

manage.py 는 프로젝트의 환경을 구성하기 때문에 간단한

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

web biohackers.net