1. 개발환경 기본 설정
가. 개발환경 설정
1) 가상 환경
•
가상환경 설정 명령
python3 -m venv venv
•
가상환경 활성화 명령
source venv/bin/activate
•
가상환경 비활성화 명령
deactivate
2) 장고 설정
•
가상환경에 장고 설치 명령
pip install django~=3.1.0
•
•
Add Super User
python manage.py createsuperuser
•
Django 내 새로운 앱 추가 설정
# config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'posts', # 추가한 부분
]
Python
복사
•
DB와 새로 추가한 Django 앱 사이 Sync
•
IDE에 python3이 인터프리터로 설정이 안되어 있다면 IDE 인터프리터 설정에서 변경 필요
나. 가상환경 설정(Poetry)
1) Poetry 설치
•
Poetry 설치(Mac 기준)
→ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
•
프로젝트 초기설정 및 가상환경 생성
→ poetry init
•
패키지 설치(프로젝트 클론 시)
→ .toml 파일 내 패키지 설치
→ poetry install
•
장고 프로젝트 설정
→ poetry run django-admin.py startproject <demoproject> .
2) Poetry 기본 조작 명령
•
가상환경에 패키지 추가
→ poetry add django=3.1.13
→ poetry add django@latest
•
패키지 삭제
→ poetry remove pytest
•
개발환경 패키지 설치
→ poetry add pytest factory-boy --dev
다. 가상환경 설정(virtualenvwrapper)
1) 파이썬 가상 환경 사용 권장
•
상이한 버전의 파이썬으로 각각의 장고 어플리케이션을 개발 불가
→ 하나의 로컬 환경에서 파이썬 버전을 하나만 지정할 수 있음
2) 기본 환경 설정
•
virtualenv --python=파이썬버전 가상환경이름
2-1) 가상 환경 설정
•
virtualenvwrapper 설치
sudo pip3 install virtualenvwrapper
Shell
복사
•
shell startup file(~/.bash_profile) 수정
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.9/bin/python3
export PROJECT_HOME=$HOME/Devel
source /Library/Frameworks/Python.framework/Versions/3.9/bin/virtualenvwrapper.sh
Shell
복사
2-2) M1 가상 환경 설정
•
virtualenvwrapper 설치
sudo pip3 install virtualenv virtualenvwrapper
Shell
복사
•
shell startup file(~/.zshrc) 수정
export WORKON_HOME=~/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON="$(which python3.9)"
source /Library/Frameworks/Python.framework/Versions/3.9/bin/virtualenvwrapper.sh
JavaScript
복사
•
•
정상 설치 확인
source ~/.zshrc
3) 가상 환경 생성
•
새로운 가상 환경 생성
→ 명령: mkvirtualenv my_django_environment
→ 결과: 커맨드라인 변경, (my_django_environment) mj@big-smart ~ %
4) 가상 환경 사용
•
source ~/.zshrc: 가상환경 shell startup script 실행
•
deactivate: 활성화된 파이썬 가상 환경을 비활성화한다
•
workon: 사용가능한 가상 환경 목록을 보여준다
•
workon name_of_environment: 특정 파이썬 가상 환경을 활성화한다
•
rmvirtualenv name_of_environment: 특정 환경을 제거한다.
라. 가상환경 설정(pipenv)
1) pipenv 설치
•
pip3 install pipenv
or
•
brew install pipenv
2) django 설치
•
pipenv --python 3.9
-> Pipfile 자동생성
•
pipenv install django-=3.1.0
3) pipenv 작업
•
Pipfile 덮어쓰기
•
pipenv install
•
pipenv run start
라. 장고 설치 및 실행
1) 장고 설치 및 확인
# 장고 설치
pip3 install django
# 설치 확인
python3 -m django --version
Shell
복사
2) 장고 실행
# django-admin 도구 활용하여 기본 프로젝트 생성(testsite)
django-admin startproject testsite
cd testsite
# 개발용 웹 서버 실행
python3 manage.py runserver
# 특정 설정 정보 기준 웹 서버 실행
python3 manage.py runserver --settings=settings.dev
Shell
복사
마. pip package 관리
1) requirements.txt
•
package 목록을 requirements.txt 내 정리
→ pip freeze > requirements.txt
djangorestframework==3.11.2
Django==3.1.13
.
.
.
Plain Text
복사
•
requirements.txt 내 모든 package 설치
→ pip install -r requirements.txt
•
pip로 설치된 패키지 목록 확인
→ pip list
2. 어플리케이션 설정
가. 프로젝트 생성
1) 프로젝트 생성 명령
•
'local library'라는 이름의 프로젝트 생성
→ django-admin 명령에 따라 프로젝트의 구조가 생성됨
django-admin startproject locallibrary
cd locallibrary
Shell
복사
나. Application 생성 및 등록
1) Application 생성 명령
•
'catalog'라는 application 생성
python3 manage.py startapp catalog
Shell
복사
2) Application 등록
•
프로젝트(locallibrary)의 설정파일(locallibrary/locallibrary/settings.py)에 application(catalog) 등록
→ 설정파일의 INSTALLED_APP의 리스트에 'catalog.apps.CatalogConfig' 값 추가
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'catalog.apps.CatalogConfig',
]
Shell
복사
다. 프로젝트 설정
1) 기본 설정 조작
•
프로젝트 설정파일(locallibrary/locallibrary/settings.py) 내부에서 여러 설정 작업 가능
2) DB 설정(SQL Lite)
•
데이터베이스의 경우, settings.py 이하 DATABASES 딕셔너리에서 설정
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
Shell
복사
3) DB 설정(MySQL)
•
라. URL 맵퍼 연결
1) urls.py 조작
•
path('catalog/', include('catalog.urls'))
•
path('', RedirectView.as_view(url='/catalog/', permanent=True))
→ 기본 경로(/)에 대한 요청 처리 시, /catalog/ 경로로 리다이렉트
→ view의 함수 중 'RedirectView.as_view' 함수가 리다이렉트 기능
•
static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
→ 개발 중 정적인 파일(CSS, JavaScript 파일)을 제공할 수 있도록 설정
마. 환경설정 테스트
1) 데이터베이스 마이그레이션 실행
•
마이그레이션(migration): 장고의 모델(객체) 정의에 변경사항이 발생하면 자동으로 해당 변화를 반영하여 DB의 데이터 구조를 수정
→ 장고는 ORM 사용을 위해 장고의 모델(객체)을 DB의 엔티티에 매핑함
→ 장고의 모델에 맞춰 DB의 엔티티를 수정하는 로직(스크립트)는 '/locallibrary/catalog/migrations/'에 생성할 수 있음
•
makemigrations: 마이그레이션 생성 명령
→ 마이그레이션 생성과 실행 명령을 구분함으로써 마이그레이션 실행 전 점검할 수 있음
•
migrate: 마이그레이션 실행 명령
python3 manage.py makemigrations
python3 manage.py migrate
Python
복사
2) 웹사이트 실행
•
에러 발생
→ 기본경로 요청(/)에 대해 /catalog로 리다이렉션 처리했지만 /catalog에 대해 맵핑하여 처리할 로직이 없음
Reference
•
M1 가상환경 설치, https://scv-life.tistory.com/31
•
파이썬 웹 프로그래밍, 김석훈, 한빛미디어
•
William S. Vincent, DJANGO for APIs
•
Django - MySQL 연동, https://docs.djangoproject.com/en/3.2/ref/databases/#mysql-notes
•
Poetry 조작 명령, https://blog.gyus.me/2020/introduce-poetry/