(Django)장고 프로젝트 설계
프로젝트 내용: 설문에 해당하는 질문을 보여준 후 질무에 포함되어 있는 답변 항목에 투표하면 그 결과를 알려준다.
페이지 설계
다음 3개의 페이지를 만들것이다.
index.html: 최근에 실시하고 있는 질문의 리스트를 보여주는 페이지
detail.html: 하나의 질문에 대해 투표할 수 있도록 답변 항목을 폼
results.html: 질문에 따른 투표 결과를 보여준다.
db테이블 설계
Question테이블 설계(질문을 저장하는 테이블)
컬럼명 | 타입 | 제약 조건 | 설명 |
id | integer | Notnull, PK, AuoIncrement | Primary Key |
question_text | varchar(200) | Notnull | 질문 문장 |
pub_date | datetime | Notnull | 질문 생성 시각 |
Choice테이블 설계(질문별로 선택용 답변 항목을 저장하는 테이블)
컬럼명 | 타입 | 제약 조건 | 설명 |
id | integer | Notnull, PK, AuoIncrement | Primary Key |
choice_text | varchar(200) | Notnull | 답변 항목 문구 |
votes | integer | Notnull | 투표 카운트 |
question | integer | Notnull,FK(Question.id),Index | Foreign Key(외래키) |
NotNull:반드시 컬럼값이 있어야 한다.
PK, AuoIncrement: Primary Key는 자동으로 증가한다.
Choice테이블의 question컬럼은 Question테이블과 Foreign Key관계로 연결되도록 했고, Index를 생성하도록 함
프로젝트 뼈대 만들기
-프로젝트에 필요한 디렉토리 및 파일을 구성하고, 설정파일을 셋팅한다.
-기본 테이블을 생선 후 관리자 계정(슈퍼유저)생성
예상 디렉토리 체계
이 외에도 templates, static, logs들의 디렉토리가 필요.
필요시 다른 디렉토리 생성도 무방
ch3 디렉토리: 프로젝트 관력 디렉토리 및 파일을 모아주는 최상위 루트 디렉토리(settings.py파일의 BASE_DIR항목으로 지정됨)-db.sqlite3: SQLite3데이터베이스 파일. 테이블이 들어있다.-mange.py: 장고의 명령어를 처리하는 파일
detect디렉토리: 프로젝트명으로 만들어진 디렉토리. 프로젝트 관련 파일들이 들어있다.
-__init__.py: 디렉토리에 이 파일이 있으면 파이썬 패키지로 인식한다.
-setting.py: 프로젝트 설정 파일
-urls.py: 프로젝트 레벨의 URL패턴을 정의하는 최상위 URLconf, 보통은 애플리케이션 디렉토리마다 하위 urls.py파일 이 있다.
-wsgi.py: Apache와 같은 웹 서버와 WSGI규격으로 연동하기 위한 파일
polls디렉토리: 애플리케이션명으로 만들어진 애플리케이션 디렉토리. 해당 애플리케이션 관련 파일들이 들어있다.
-__init__.py: 디렉토리에 이 파일이 있으면 파이썬 패키지로 인식한다.
-admin.py: Admin사이트에 모델 클래스를 등록해주는 파일
-apps.py: 애플리케이션의 설정 클래스를 정의하는 파일
-mygrations디렉토리
-models.py: 데이터베이스 모델 클래스를 정의하는 파일
-tests.py: 단위 테스트용 파일
-views.py: 뷰 함수를 정의하는 파일. 함수형 뷰 및 클래스형 뷰 모두 이 파일에 정의한다.
프로젝트에 필요한 폴더 및 파일 세팅
파이참 프로젝트에서 새 프로젝트를 만들고 interpreter를 https://godsla7.tistory.com/16 에서 만든 가상환경으로 설정하고 시작터미널을 열고 가상환경이 연결되었는지 확인 후 django-admin startproject detect명령어로 detect라는 프로젝트를 생성그 후 cd detect 명령어로 프로젝트 폴더로 들어간 후 python manage.py startapp polls명령어로 polls라는 애플리케이션을 생성
detect프로젝트의 이름과 하위 패키지의 이름이 같으므로 detect의 이름을 ch3로 변경(단순히 헷갈리지 않기 위해서)
->rename으로 안될 수 있기 때문에 move detect ch3명령어를 사용한다.
프로젝트 설정파일 변경
detect의 settings.py 파일
1.DEBUG설정
장고는 DEBUG가 True이면 개발모드 Fasle이면 운영 모드로 인식한다.
운영모드: ALLOWD_HOSTS에 반드시 서버의 IP나 도메인을 지정해야 한다.
개발모드: ALLOWD_HOSTS에 값을 지정하지 않아도 ['localhost','127.0.0.1']로 간주한다.
2.애플리케이션 등록
프로젝트에 포함되는 애플리케이션들은 모두 설정 파일에 등록되어야 한다.
(등록할때 간단하게 모듈명인 'polls'만 등록해도 되지만, 어플리케이션의 설정 클래스로 등록하는 것이 더 정확하다.)
->설정 클래스는 startapps명령어로 생성한 애플리케이션 폴더안의 apps.py파일에 정의되어 있다.
INSTALLED_APPS에 추가
3.데이터 베이스 엔진 설정
장고는 default로 SQLite3데이터베이스 엔진을 사용하게 설정되어 있다.
다른 데이터베이스 엔진을 사용하고싶을 때 변경한다.
4.타임존 지정
한국시간으로 변경하고
USE_TZ=True이면 장고가 알아서 시간대를 조정해준다.
작업확인
python manage.py migrate명령어로 데이터베이스에 기본 테이블을 생성한다.
python manage.py createsuperuser로 관리자(슈퍼유저생성)
python manage.py runserver 명령어 실행(서버를 끌려면 Ctrl+c)
브라우저에서 http://127.0.0.1:8000/ 로 접속
브라우저에서 http://127.0.0.1:8000/admin 로 접속 후 만든 관리자 계정으로 로그인
Groups와 Users는 장고에서 만들어준 테이블이다.(이것은 settings의 애플리케이션이 등록되어있기 때문이다.)
정상작동 확인!