Django프로젝트시작
Django 프로젝트 시작
초기 프로젝트 생성
- mkdir 프로젝트Dir
- cd 프로젝트Dir
- django-admin.py startproject 프로젝트이름
- 프로젝트 이름은 Django나 Python 기본 패키지 이름과 겹치게 해서는 안된다.
- Django 프로젝트 소스 파일들은 Web Root 가 아닌 다른 디렉토리에 두도록 한다. Web Root에 두면 보안상 좋지 않다.
생성된 파일 설명
- __init__.py : 현재 디렉토리가 파이선 패키지 임을 나타내는 파일
- manage.py : Django 프로젝트를 관리하는 명령행 유틸리티
- settings.py : 프로젝트 설정 파일
- urls.py : URL 설정
서버 시작
- Django 내장 개발 서버가 있다.
- 이 내장 서버는 개발용이다. 실 운영시에는 사용하지 말라.
- 일단 최초에 한 번 : chmod +x manage.py
- 서버 실행 : manage.py runserver
- Development server is running at http://127.0.0.1:8000/ : 서버의 주소와 포트를 보여준다.
- 이 주소에 접속해 보면 파란 환영 메시지를 볼 수 있다.
- manage.py runserver 다른포트 : 포트 번호 바꿔서 실행
데이터베이스 설정
- settings.py 에 설정
- DATABASE_ENGINE : 데이터베이스 종류. postgresql_psycopg2, mysql, sqlite3, ...
- DATABASE_NAME : 데이터베이스 이름. SQLite의 경우에는 파일 경로.
- DATABASE_USER : 사용자명
- DATABASE_PASSWORD : 비밀번호
- DATABASE_HOST : 호스트명
- DATABASE_PORT : DB 포트
- INSTALLED_APP 변수에는 이 Django 인스턴스에 설치된 Django 애플리케이션 목록을 설정한다. 기본 설정 사항을 데이터베이스를 사용해야만 하게 되어 있다. 이 변수에 기본 설정되어 있는 값들은, 보편적인 애플리케이션을 우한 예제로, 굳이 이걸 사용할 필요는 없다. 필요 없으면 그 줄은 삭제해도 된다.
- 데이터베이스 싱크 맞추기(테이블 자동생성) : manage.py syncdb
- settings.py에 설정해둔 DB 사용.
- INSTALLED_APPS 를 확인하고 테이블을 자동 생성한다.
- 관리자(superuser) 계정을 만들라고 하면 만든다.
- syncdb는 오직 INSTALLED_APPS에 있는 항목들에 대해서만 테이블을 생성한다.
모델 생성하기
- 애플리케이션을 생성한다.
- cd mysite : mysite는 프로젝트이다.
- manage.py startapp polls : polls는 애플리케이션이다.
- polls 디렉토리가 생성되고 기본적인 파일들이 생성된다.
- 모델(Model)이란 데이터에 관해 정의하는 소스이다. 데이터의 필드와 행위 등을 여기에 코딩한다.
- models.py 에 모델 클래스들을 코딩한다.
- 모델 클래스는 django.db.models.Model 클래스를 상속받는다.
- class Poll(models.Model)
- 모델의 각 필드는 데이터베이스의 칼럼을 의미한다. 모델의 필드 이름은 데이터베이스와 Python 모두 인지할 수 있는 문자들을 사용해서 지어야 한다.
- 각 필드는 models.*Field 클래스의 인스턴스이다. (예: models.CharField 문자열 필드, models.DateTimeField : 시간 필드)
- models.ForeignKey 필드는 외래키를 의미한다. Django는 many-to-many, many-to-one, one-to-one을 지원한다.
- 모델 클래스 생성시 첫번째 인자로 문자열을 주어서 사람이 읽을 수 있는 설명을 붙여도 된다.
- def __str__(self) 메소드를 생성해 주면, 객체의 이름이 필요할 때 __str__메소드의 실행 결과가 출력된다.
모델 활성화
- 테이블 스키마를 생성하고, Python 테이블 접근 API를 생성해야 한다.
- settings.py 에서 INSTALLED_APP에 'mysite.polls' 추가
- manage.py sql polls : polls 애플리케이션 모델들의 테이블을 생성하는 SQL DDL를 출력한다. 테이블을 실제로 생성하지는 않는다.
- manage.py validate polls : polls 애플리케이션 모델들이 제대로 작성되었는지 확인한다.
- manage.py sqlcustom polls : polls 애플리케이션의 사용자정의 SQL DDL 문을 출력한다.
- manage.py sqlclear polls : polls 애플리케이션의 테이블을 삭제하는 SQL을 출력한다.
- manage.py sqlindexes polls : polls 애플리케이션의 CREATE INDEX 를 출력한다.
- manage.py sqlall polls : polls 애플리케이션의 sql, sqlcustom, sqlindexes 를 실행한 결과를 조합해서 보여준다.
- manage.py syncdb
- 실행하면 생성될 필요가 있는 나머지 테이블들이 모두 생성된다.
- manage.py sqlall 을 실행했을 때 나오는 구문들을 진짜로 실행한다.
- INSTALLED_APPS에 있는 애플리케이션들의 테이블 중에서 데이터베이스에 "존재하지 않는 테이블"들만을 생성하는 것이다.
- syncdb는 원하는 대로 언제든지 호출해도 된다.
Django Interactive Shell
manage.py shell 를 실행하여 인터랙티브 셸을 실행할 수 있다. manage.py 가 현재 애플리케이션에 관련된 아래 사항들을 자동으로 설정하고서 python 셸을 실행해준다.
- 현재 프로젝트를 sys.path에 넣어준다.
- DJANGO_SETTINGS_MODULE 환경변수를 설정해준다. : Django에게 settings.py 파일의 경로가 어디인지 알려준다.
- 다음과 같이 실행해서 셸 상에서 모델들을 다룰 수 있다.
- from mysite.polls.models import Poll, Choice
- Poll.objects.all()
- from datetime import datetime
- p = Poll(question="What's up?", pub_date=datetime.now())
- p.save() # Create
- p.id
- p.question
- p.pub_date
- p.pub_date = datetime(2005, 4, 1, 0, 0)
- p.save() # Update
- 조건 줘서 객체 가져오기
- Poll.objects.all() : 모두 가져오기
- Poll.objects.filter(id=1) : id = 1 인 것만
- Poll.objects.get(id=1) : id = 1 인 것만
- Poll.objects.get(pub_date__year=2005) : pub_date의 year가 2005인 것만
- Poll.objects.get(pk=1) : 이것은 Poll.objects.get(id=1)과 동일한것이다.
- p = Poll.objects.get(pk=1)
- p.choice_set.create(choice='Not much', votes=0) : Choice 객체 생성해서 Poll 객체에 연결
- p.choice_set.create(choice='The sky', votes=0)
- c = p.choice_set.create(choice='Just hacking again', votes=0)
- c.poll : 외래키 Poll 객체
- p.choice_set.all() : 해당 Poll 객체가 소유하고 있는 모든 Choice 객체들
- p.choice_set.count() : 해당 Poll 객체가 소유하고 있는 모든 Choice 객체의 개수
- c = p.choice_set.filter(choice_startswith='Just hacking') : choice 필드가 Just hacking으로 시작하는 choice 객체 선택
- c.delete() : 삭제