[Django] 개요 및 튜토리얼 (1/2)

문성호·2020년 9월 4일

Django란?

  • 파이썬 기반의 오픈소스 Web Application 프레임워크.

  • 웹을 개발할 때 굉장히 빈번하게 반복적인 문제를 해결해야 될 때가 많음. 예를들면, 사용자들의 회원가입, 로그인, 로그아웃 등의 사용자 인증 및 관리.

  • 그렇다면 우리도 그럴싸한 웹을 서비스 하려면 기본적인 기능들을 제공해야 됩니다. 이러한 기능들을 맨땅에 헤딩하지 않도록 편리한 개발환경(예를 들면, 미리 이러한 기능들이 구현이 되어 있다던지 등…)을 만들어 놓은 것이 바로 프레임워크의 역할임.

Django의 MVT 패턴

  • 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와 App

  • Django 프레임워크를 통해 생성된 Project는 위와 같은 구조에 따르게 되어 있음.

  • 가령 myProject라는 프로젝트를 생성하면 기본적으로 다음과 같은 코드들이 자동생성됨.

    • manage.py : 프로젝트 전체를 관장하고 상호작용하는 커맨드라인의 유틸리티.
    • myProject 내부에는
      • __init.py : python의 init.py와 같이, 디렉토리를 패키지로써 다루라고 알려주는 용도의 init 파일.
      • settings.py : 현재 Django Project의 환경 및 구성을 저장함.
      • urls.py : Django project의 URL 선언을 저장. 프로젝트의 목차라고 생각하면 이해하기 편함. 이 곳에서 path()함수를 통해 App들로 분기하게 만들어줌.
      • asgi.py : 비동기 서버 게이트웨이 인터페이스. 다음에 좀 더 자세히 정리.
      • wsgi.py : 웹 서버 게이트웨이 인터페이스. 다음에 좀 더 자세히 정리.

튜토리얼 따라하기(runserver까지)

(1) 프로젝트 만들기

  • Django Project를 만들고 처음 화면이다.
  • Django는 기본적으로 이런 파일들을 제공한다.

(2) 앱 만들고 등록하기.


  • 모든 웹사이트는 수많은 App으로 관리된다.
    (코드로 치면 함수나 모듈과 같다.)
  • Apps.py에 app 이름과 함수이름이 있다.
    이를 mysite의 settings.py의 INSTALLED_APP에 기입해서, 내가 이런 APP을 이 프로젝트에서 사용할거야라고 등록해줘야 한다.

(3) 뷰 작성하기

from django.http import HttpResponse 

def index(request):
	return HttpResponse("Hello, world. You're at the polls index.")  
  • 기본 함수 index를 만들고, HttpResponse를 만들어 약간의 메시지를 출력하게 한다.
  • 웹 서비스는 Client가 어떤 요청(Request)를 하면, 그 Request를 받아 내부 Logic을 거쳐 Server에서 응답(Response)를 해준다.
  • 실제 코드에서도 argument로 request를 받아, HttpResponse 함수를 통해 응답하는 과정을 거치고 있다.

(4) urls.py에서 경로 연결하기.

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),
]
  • 한편 Project 전체의 Urls.py에서는 polls App으로 분기시켜주는 역할을 한다.
  • path함수를 통해 polls 디렉토리로 분기시켜주고, include 함수로 polls의 urls.py로 directing 시켜준다.

(5) migration 하기.

Migrations for 'polls':
  polls/migrations/0001_initial.py
    - Create model Question
    - Create model Choice
  • migration이란, 쉽게 말하면 프로젝트의 변경사항을 DB에 반영하는 것이다.
  • python manage.py makemigrations polls

    를 통해 polls APP의 변경사항을 알려주고,

    python manage.py migrate

    Apply all migrations: admin, auth, contenttypes, polls, sessions
    Running migrations:
    Rendering model states... DONE
    Applying polls.0001_initial... OK
    를 통해 migrate 시킨다.

(6) 구동

profile
오늘을 모아 내일을

0개의 댓글