PC(전역 환경) 에 장고와 필요한 라이브러리를 설치하는 것은
건물의 냉방, 난방을 중앙에서 통제하는 꼴이다.
건물에 있는 사람들의 불만은 쏟아져 나올 것이고 모두를 만족시킬 수 없을 것이다.
가장 좋은 방법은 건물 내부에 있는 공간마다 개별적으로 통제할 수 있도록 하는 것이다.
개발은 프로젝트 단위로 이루어진다.
장고 2.x 버젼을 사용해 개발한 프로젝트 A 와
장고 3.x 버젼을 사용해 개발한 프로젝트 B 가 있다고 가정해보자.
전역환경에는 단 하나의 장고환경만 설치할 수 있다.
따라서 전역환경에 장고를 설치해 중앙통제하는 것이 아닌
프로젝트마다 가상의 독립적인 장고환경을 제공해 개별통제할 수 있도록 해야한다!
경험있는 파이썬/장고 개발자들은 일반적으로 독립적인 파이썬 환경에서 파이썬 앱들을 실행한다. 이것은 여러 다른 장고 환경이 하나의 컴퓨터에서 작동 가능하게 한다. 장고 개발팀에서도 당신이 파이썬 가상 환경을 사용하는 것을 추천한다.
# 가상환경 라이브러리 설치
$ pip install virtualenv
# 프로젝트를 시작할 디렉토리를 생성하고 해당 디렉토리로 이동
$ mkdir django_project_01 && cd django_project_01
# 가상환경 설치 및 생성된 가상환경 디렉토리 확인
$ virtualenv venv(가상환경 이름)
# 가상환경 실행 (activate 파일에 적힌 스크립트를 실행한다) 및 프롬프트 (venv) 확인
$ source venv/bin/activate
# 가상환경에서 장고설치
$ pip install django
파이썬 전용 에디터 PyCharm 은 프로젝트 생성과 동시에 가상환경을 제공하기 때문에 보다 편하게 가상환경을 사용할 수 있다.
# 현재 디렉토리에서 장고 프로젝트 생성
# 전반적인 프로젝트를 관리하기 때문에 config
$ django-admin startproject config . (. 은 현재 디렉토리에서 생성)
생성된 디렉토리 및 파일
django_project_01/ # 프로젝트 이름(개발에 영향x)
manage.py # 장고를 실행하기 위한 스크립트 파일
config/ # 생성된 프로젝트 폴더 (프로젝트 전반적인 설정관련)
__init__.py # 디렉토리를 파이썬 패키지로 인식하는 파일
settings.py # 전반적인 설정 관련 파일
urls.py # url을 처리하는 파일
wsgi.py # 웹서버와 통신 설정 파일
asgi.py
# 장고에서는 개발용으로 runserver를 제공한다.
# manage.py 스크립트로 장고 개발용 테스트서버 실행 및 확인
$ python manage.py runserver
# 장고에서 기본적으로 등록된 어플리케이션의 모델들이 생성되어 있으나
# 데이터베이스에 연동되지 않았음을 경고하는 문구
You have 18 unapplied migration(s). Your project may not work properly
until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
# http://127.0.0.1:8000/ 주소로 서버가 실행되고 있음을 확인
February 04, 2021 - 15:40:24
Django version 3.1.6, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
# 경고문구에 있는 명령어를 실행하면 경고 문구가 사라진다.
$ python manage.py migrate
# 장고는 SQLite, MySQL, PostgreSQL, Oracle 지원
# 기본설정은 SQLite, 작은 프로젝트에 SQLite 사용
# django-PostgreSQL 조합을 가장 많이 사용
# migrate 명령어를 사용하면 디렉토리에 db.sqlite3 생성된다.
# 데이터베이스에 생성된 테이블을 확인하기 위해서 sqlite3 설치 및 확인
$ sudo apt install sqlite3
$ sqlite3 db.sqlite3
$ .tables
# vi config/settings.py
# 기준 시간대를 설정해야 데이터를 저장하고 수정할 때 적절한 시간을 기록할 수 있다.
TIME_ZONE = 'Asia/Seoul'
장고 프로젝트의 기능은 어플리케이션 단위로 구현하며 구성되어 있다.
ex) 사용자 계정을 관리하는 기능을 담당할 account 앱 생성
$ python manage.py startapp account
생성된 디렉토리 및 파일
account/
migrations # migrations 파일을 저장하는 디렉토리
__init__.py
admin.py # 해당 어플리케이션의 데이터를 관리자 페이지로 관리하는 파일
apps.py
models.py # model을 생성해 데이터베이스와 데이터를 주고 받을 수 있게 하는 파일
test.py
views.py # 요청된 url에 해당하는 작업의 로직을 처리하는 파일
urls.py(생성) # url파일은 처음에 없지만 생성해 url 관리 및 맵핑
# vi config/settings.py
# 장고에 기본적으로 등록된 어플리케이션
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
# 어플리케이션을 등록해야 장고에서 인식하고 데이터베이스와 연동가능
# 생성한 어플리케이션 등록
INSTALLED_APPS += [
'account',
]