2021. 10. 14. 21:00ㆍ언어/Python
Django Workflow
프로젝트 만들기
🙋️ 이 글은 위의 튜토리얼을 따라하며 정리한 내용입니다.
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개의 필수 인수인 route 와 view, 2개의 옵셔널 인수인 kwargs 와 name까지 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
'언어 > Python' 카테고리의 다른 글
TIL26 | CodeKata 배열 요소 조합해서 특정 수 만들기, 숫자 뒤집기 (0) | 2021.10.19 |
---|---|
TIL25 | httpie 사용하기 (0) | 2021.10.19 |
TIL20 | Django Tutorials (1) 초기 세팅 (0) | 2021.10.14 |
TIL19 | Python 가상환경(Miniconda) (1) | 2021.10.14 |
TIL16 | Python Modules & Packages, 절대경로와 상대경로 (0) | 2021.10.11 |