Table of Contents

Django

django basics

Virtual Environments

  1. 작업할 디렉토리 생성
  2. 가상 환경 생성
  3. 생성된 가상 환경으로 진입 → 프롬프트 변경 확인
  4. 작업
  5. 가상 환경에서 빠져나옴
(myvenv)$ pip3 freeze > requirenments.txt  # myvenv 가상 환경에 설치된 패키지 목록을 requirenments.txt로 저장
(new_venv)$ pip3 install -r requirenments.txt  # 
$ source /home/alex/VENV/djprj/bin/activate  # djprj 가상 환경으로 진입
(djprj)$ pip3 install Django  # 최신 버전의 장고 설치
(djprj)$ pip3 list  # 설치된 패키지 리스트 확인

# 파이썬 기본 라이브러리들의 위치 /usr/local/lib/python3.7/
# 파이썬 외부 라이브러리들의 위치 /home/alex/VENV/djprj/lib/python3.7/site-packages/
(djprj)$ pip3 install pytz
(djprj)$ pip install -U pip setuptools wheel
(djprj)$ pip3 install pyopenssl ndg-httpsclient pyasn1

develop with django

작업 순서 관련 명령/파일 필요한 작업 내용
뼈대 만들기 startproject 프로젝트 생성
settings.py 프로젝트 설정 항목 변경
migrate User/Group 테이블 생성
createsuperuser 프로젝트 관리자인 슈퍼유저를 만듦
startapp 앱 생성
settings.py 앱 등록
모델 코딩하기 models.py 모델(테이블) 정의
admin.py admin 사이트에 모델 등록
makemigrations 모델의 변경사항 추출
migrate 변경사항을 데이터베이스에 반영
URLconf 코딩하기 urls.py URL 정의
뷰 코딩하기 views.py 뷰 로직 작성
템플릿 코딩하기 templates 디렉토리 템플릿 파일 작성
그 외 코딩하기 - (없음)
(djprj)$ django-admin startproject mysite .

# settings.py

# ALLOWED_HOST 지정
ALLOWED_HOSTS = ['192.168.0.1', 'localhost', '127.0.0.1']

# 애플리케이션 등록

# 템플릿 설정, DIRS 변경
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 수정
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.message.context_processors.messages',
            ],
        },
    },
]

# 데이터베이스 엔진
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

# 타임존 설정
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Seoul'

# 정적 파일 설정
STATIC_URL = '/static/'

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]  # 추가

# 미디어 관련 사항 지정
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

# 한국 시간대만 사용하는 경우
# USE_TZ = True
USE_TZ = False

# 장고 사용 언어
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ko-kr'

장고 핵심 기능

Model

View

제네릭 뷰 분류 및 역할
Base View View 가장 기본이 되는 최상위 제네릭 뷰. 다른 모든 제네릭 뷰는 View의 하위 클래스.
TemplateView 템플릿이 주어지면 해당 템플릿을 렌더링
Redirect View URL이 주어지면 해당 URL로 리다이렉트
Generic Display View ListView 조건에 맞는 여러 개의 객체 리스트를 보여줌.
DetailView 객체 하나에 대한 상세한 정보를 보여줌.
Generic Edit View FormView 폼이 주어지면 해당 폼을 보여줌.
CreateView 폼을 보여주고 폼의 내용으로 DB 레코드를 신규 생성
UpdateView 폼을 보여주고 폼의 내용으로 기존 DB 레코드를 수정
DeleteView 삭제 컨펌 폼을 보여주고, 기존 DB 레코드를 삭제
Generic Data View ArchiveIndexView 조건에 맞는 여러 개의 객체 및 그 객체들에 대한 날짜 정보를 보여줌.
YearArchiveView 연도가 주어지면 그 연도에 해당하는 객체들을 보여줌.
MonthArchiveView 연, 월이 주어지면 그에 해당하는 객체들을 보여줌.
WeekArchiveView 연도와 주차(Week)가 주어지면 그에 해당하는 객체들을 보여줌.
DayArchiveView 연, 월, 일이 주어지면 그 날짜에 해당하는 객체들을 보여줌.
TodayArchiveView 오늘 날짜에 해당하는 객체들을 보여줌.
DateDetailView 연, 월, 일 기본키(또는 슬러그)가 주어지면 그에 해당하는 특정 객체 하나에 대한 상세한 정보를 보여줌.

Template

Form

AWS, Heroku

(djprj)$ python manage.py collectstatic
장점 단점
EC2(Elastic Comput Cloud) 서비스 구성 자유도 높음, 비용 낮음 작업 난이도 높음
Heroku 서비스 작업 난이도 낮음 구성 자유도 낮음, 비용 높음