코딩/python 장고 메모장

(Django)장고 프로젝트 설계

쟈크손 2022. 11. 5. 17:17

프로젝트 내용: 설문에 해당하는 질문을 보여준 후 질무에 포함되어 있는 답변 항목에 투표하면 그 결과를 알려준다.

페이지 설계

다음 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/

브라우저에서 http://127.0.0.1:8000/admin 로 접속 후 만든 관리자 계정으로 로그인

http://127.0.0.1:8000/admin
로그인

Groups와 Users는 장고에서 만들어준 테이블이다.(이것은 settings의 애플리케이션이 등록되어있기 때문이다.)

 

정상작동 확인!