
파이썬 기반의 오픈소스 Web Application 프레임워크.
웹을 개발할 때 굉장히 빈번하게 반복적인 문제를 해결해야 될 때가 많음. 예를들면, 사용자들의 회원가입, 로그인, 로그아웃 등의 사용자 인증 및 관리.
그렇다면 우리도 그럴싸한 웹을 서비스 하려면 기본적인 기능들을 제공해야 됩니다. 이러한 기능들을 맨땅에 헤딩하지 않도록 편리한 개발환경(예를 들면, 미리 이러한 기능들이 구현이 되어 있다던지 등…)을 만들어 놓은 것이 바로 프레임워크의 역할임.

Django Framework는 기본적으로 MVT 패턴에 따라 Web을 설계하게 되어 있음.
MVT 패턴은 Model, View, Template의 약자다.
모든 프로그램이 데이터와 알고리즘으로 이루어져있듯이, Web도 Database를 담당하는 Model, Logic을 담당하는 View, Front에서 시각적인 부분을 담당하는 Template으로 나뉘어져있다.
Django는 이러한 MVT 패턴을 따르고 있고, 실제로 Project 내부의 App들도 자동으로 그런 파일들로 나누어져있다. (models.py, views.py, template 내부의 html 파일들..)

Django 프레임워크를 통해 생성된 Project는 위와 같은 구조에 따르게 되어 있음.
가령 myProject라는 프로젝트를 생성하면 기본적으로 다음과 같은 코드들이 자동생성됨.



from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
Project내에 urls는 Project 폴더의 urls.py와 각 App들 내부의 urls.py가 있는데, Project 폴더(여기서는 mysite)에서 urls.py를 통해 각 App들로 '분기' 해준다음 각 App에서 views.py의 내부 함수로 경로를 Directing 시켜서 기능을 실행하게 한다.
위 코드는 mysite 내부의 polls app에서의 urls.py다. app 폴더 내의 views.py를 import시킨다음, path함수를 통해서 분기시켜준다.
path함수는 (경로, views 내부 함수, 함수 이름) 순으로 argument를 받는데,
위 예제에서는 app 내부이므로 경로는 빈 스트링('')이고, views의 index 함수를 참조하고, 함수 이름은 index라고 넘겨준다.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')), # mysite.urls.py에다 polls.urls.py를 include
path('admin/', admin.site.urls),
]
Migrations for 'polls':
polls/migrations/0001_initial.py
- Create model Question
- Create model Choice
를 통해 polls APP의 변경사항을 알려주고,python manage.py makemigrations polls
를 통해 migrate 시킨다.python manage.py migrate
Apply all migrations: admin, auth, contenttypes, polls, sessions Running migrations: Rendering model states... DONE Applying polls.0001_initial... OK
