TIL21 | Django Tutorials (2) 프로젝트 만들기

2021. 10. 14. 21:00언어/Python

반응형

Django Workflow

django_workflow

 

프로젝트 만들기

첫 번째 장고 앱 작성하기, part 1

첫 번째 장고 앱 작성하기, part 2

🙋️ 이 글은 위의 튜토리얼을 따라하며 정리한 내용입니다.

 

1. 프로젝트 생성

프로젝트를 저장한 디렉토리로 이동해서 다음 명령어 입력

$ django-admin startproject 프로젝트명

프로젝트 이름 : mysite

mysite/                  -----> 프로젝트를 위한 컨테이너. 이 이름은 Django와는 상관이 없으며, 원하는 이름으로 바꿀 수 있다.
    manage.py            -----> Django프로젝트와 상호작용하는 cmd라인의 유틸리티
    mysite/                 -----> 프로젝트를 위한 실제 Python 패키지들이 저장. 
        __init__.py         -----> Python에게 이 디렉토리를 패키지라고 알려주는 용도의 빈 파일
        settings.py         -----> Django프로젝트의 환경 및 구성을 저장
        urls.py             -----> Django프로젝트의 url 선언을 저장
        asgi.py             -----> 프로젝트를 지원하는 ASGI 호환 웹 서버를 위한 진입점
        wsgi.py             -----> 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점

 

2. 개발 서버 실행

$ python manage.py runserver [포트 default 8000]

http://127.0.0.1:8000/ 접속해서 Congratulations! 확인

 

3. 앱 생성

manage.py 가 존재하는 디렉토리에서 다음 명령어 입력

$ python manage.py startapp 앱이름

앱이름: polls

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

 

4. 최상위 URLconf에서 앱/urls 모듈을 바라보게 설정

django.urls의 include() 함수를 이용한다.

mysite/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

include() 함수

다른 URLconf들을 참조할 수 있도록 도와준다.
Django가 함수 include()를 만나게 되면, URL의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속 처리를 위해 include 된 URLconf로 전달한다.

polls/urls.py

polls/urls.py
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

path() 함수

path() 함수에는 2개의 필수 인수인 routeview, 2개의 옵셔널 인수인 kwargsname까지 4개의 인수가 전달된다.

:: route

URL 패턴을 가진 문자열. 요청이 처리될 때, Django는 urlpatterns 의 첫 번재 패턴부터 일치하는 패턴을 찾을 때까지 요청된 URL을 각 패턴과 리스트의 순서대로 비교한다.

패턴들은 GET이나 POST의 매개변수들, 혹은 도메인 이름을 검색하지 않는다
ex ) https://www.example.com/myapp/?page=3 이 요청된 경우에 myapp/ 부분만 신경씀.

:: view

Django에서 일치하는 패턴을 찾으면, HttpRequest 객체를 첫번째 인수로 하고 경로로부터 "captured" 값을 키워드 인수로 하여 명시한 view 함수를 호출한다.

:: kwargs

임의의 키워드 인수들은 목표한 view 에 사전형으로 전달한다.

::name

URL에 이름을 지으면, 템플릿을 포함한 Django 어디에서나 명확하게 참조할 수 있다.
이 기능을 이용하여 단 하나의 파일만 수정해도 project 내의 모든 URL 패턴을 바꿀 수 있도록 도와준다.

 

5. 데이터베이스 설정

mysite/settings.py

DATABASES = {    
    'default' : {        
        'ENGINE': 'django.db.backends.mysql',        
        'NAME': 'DB명',        
        'USER': 'DB접속 계정명',        
        'PASSWORD': 'DB접속 비밀번호',        
        'HOST': '127.0.0.1',        
        'PORT': '3306',        
        'OPTIONS': {'charset': 'utf8mb4'}    
    }
}

 

6. 모델 만들기

모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)을 말한다.

위에서 예시로 만들고 있는 polls 앱은 Question(질문) 과 Choice(선택) 두가지 모델을 가지도록 만든다.

Question : 질문, 게시 날짜

Choice : 선택지, 투표 집계

polls/models.py

from django.db import modelsclass Question(models.Model):    question_text = models.CharField(max_length=200)    pub_date       = models.DateTimeField('date published')class Choice(models.Model):    question     = models.ForeignKey(Question                                     ,on_delete=models.CASCADE)    choice_text = models.CharField(max_length=200)    votes         = models.IntegerField(default=0)

 

7. 모델 활성화

mysite/settings.py > INSTALLED_APPS 설정에 PollsConfing 참조를 추가해줘야한다. PollsConfing 클래스는 polls/apps.py 파일 내에 존재한다.

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

이렇게 설정을 마치면, Django는 polls 앱이 프로젝트에 포함된 것을 알게 된다.

 

다음로는 makemigrations 명령어를 날려주자.

$ python manage.py makemigrations polls

makemigrations을 실행하면 모델을 변경시켰다는 내용과 이 변경사항을 migration으로 저장시키고 싶다는 것을 Django에게 알려준다.

Django에게 변경사항을 알려만 준 것으로 mysql DB에는 아직 변경사항 적용 안된 상태다.

 

sqlmigrate 명령어는 위의 명령어로 생성된 migrations 파일들이 어떤 sql문을 실행하는지를 보여준다.

$ python manage.py sqlmigrate polls 0001

마찬가지로 실제로 MySql DB의 마이그레이션을 실행하지 않는다.

 

이제 migrate 명령어를 실행시켜 MySql 에 모델과 관련된 테이블을 생성한다.

$ python manage.py migrate

migrate 명령은 아직 적용되지 않은 마이그레이션을 모두 수집해 실행한다. 이 과정을 통해 모델에서의 변경 사항들과 데이터베이스의 스키마의 동기화가 이루어진다.

 

showmigrations 명령어로 현재 적용된 마이그레이션 파일을 확인해볼 수 있다,

$ python manage.py showmigrations
반응형