TIL | Django | 공식 문서 정리 | 첫번째 앱 PART.1

이도운·2022년 1월 6일
0

TIL

목록 보기
31/73
post-thumbnail

첫번째 앱 작성하기 PART.1

간단한 설문조사 어플리케이션을 만드는 과정을 따라해 보겠습니다.

두 파트로 구성되어 있습니다.

  • 사람들이 설문 내용을 보고 직접 투표할 수 있는 개방된 사이트
  • 관리자가 설문을 추가, 변경, 삭제할 수 있는 관리용 사이트

Django 설치가 되어 있다고 가정합니다. 다음 명령을 실행하여 Django가 설치되어 있고 어떤 버전인지 알 수 있습니다.

python -m django --version

프로젝트 만들기

Django를 처음 사용한다면, 초기 설정에 주의를 기울여야 합니다.

커맨드라인에서 cd 명령으로 코드를 저장할 디렉토리로 이동 한 후, 다음의 명령을 수행합니다.

django-admin startproject mysite

이 명령은 현재 디렉토리에서 mysite라는 디렉토리를 생성할 것입니다.

startproject에서 무엇이 생성되는지 확인해 봅시다.

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

manage.py

  • Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티 입니다.

mysite/

  • 디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장됩니다. 이 디렉토리 내의 이름을 이용하여, 프로젝트 어디서나 Python 패키지들을 임포트할 수 있습니다.

mysite/__init__.py

  • Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일입니다.

mysite/settings.py

  • 현재 Django 프로젝트의 환경 및 구성을 저장합니다.

mysite/urls.py

  • 현재 Django project의 URL 선언을 저장합니다. Django로 작성된 사이트의 목차라고 할 수 있습니다.

mysite/asgi.py

  • 프로젝트에 사용할 ASGI 호환 웹 서버의 진입점입니다. ASGI를 사용하여 배포하는 방법을 읽어보세요.

mysite/wsgi.py

  • 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점입니다. WSGI를 사용하여 배포하는 방법을 읽어보세요.

개발 서버

당신의 Django 프로젝트가 제대로 동작하는지 확인해 봅시다. mysite 디렉토리로 이동하고, 다음 명령어를 입력하세요.

python manage.py runserver

당신은 순수 파이썬으로 작성된 경량 웹 서버인 장고 개발 서버를 시작했습니다. 운영 준비가 될 때까지 Apache 같은 운영 서버를 구성할 필요 없이 신속하게 개발할 수 있도록 Django에 이 기능을 포함했습니다.

이제 프로덕션 환경과 유사한 환경에서는 이 서버를 사용하지 마십시오. 개발 중에만 사용할 수 있습니다.

포트 변경하기
기본적으로, runserver 명령은 내부 IP의 8000번 포트로 개발 서버를 띄웁니다.
만약 이 서버의 포트를 변경하고 싶다면, 커맨드라인에서 인수를 전달해주면 됩니다.

python manage.py runserver 8080

runserver의 자동 변경 기능
개발 서버는 요청이 들어올 때마다 자동으로 Python 코드를 다시 불러옵니다. 코드의 변경사항을 반영하기 위해서 굳이 서버를 재기동 하지 않아도 됩니다. 그러나, 파일을 추가하는 등 몇몇 동작은 개발서버가 자동으로 인식하지 못하기 때문에, 이런 상황에서는 서버를 재기동 해야 적용됩니다.


설문조사 앱 만들기

Django에서 당신이 작성하는 각 어플리케이션들은 다음과 같은 관례로 Python 패키지가 구성됩니다. Django는 앱의 기본 디렉토리 구조를 자동으로 생성할 수 있는 도구를 제공하기 때문에, 코드에만 더욱 집중할 수 있습니다.

프로젝트와 앱
프로젝트와 앱의 차이점은 무엇인가요? 앱은 블로그 시스템, 공공 기록 데이터베이스 또는 소규모 의견조사 앱과 같은 기능을 하는 웹 어플리케이션입니다. 반면 프로젝트는 특정 웹 사이트에 대한 구성 및 앱의 모음입니다. 한 프로젝트에 여러 개의 앱이 포함될 수 있습니다. 앱은 여러 프로젝트에 있을 수 있습니다.

당신의 앱은 당신의 파이썬 경로 어디에나 있을 수 있습니다. 이 튜토리얼에서는 manage.py와 동일한 디렉ㅌ터리에 의견조사 앱을 만듭니다.

앱을 생성하기 위해 manage.py가 존재하는 디렉토리에서 다음의 명령을 입력해 봅시다.

python manage.py startapp polls

polls라는 디렉토리가 생겼습니다. 이걸 펼쳐놓으면 아래와 같습니다.

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

첫번째 뷰 작성하기

첫번째 뷰를 작성해봅시다. polls/view.py를 열어 다음과 같은 파이썬 코드를 입력합니다.

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

Django에서 가장 간단한 형태의 뷰입니다. 뷰를 호출하려면 이와 연결된 URL이 있어야 하는데, 이를 위해 URLconf가 사용됩니다.

polls 디렉토리에서 URLconf를 생성하려면, urls.py라는 파일을 생성해야 합니다.

polls/urls.py 파일에는 다음과 같은 코드가 포함되어 있습니다.

from django.urls import path

from . import views

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

다음 단계로, 최상위 URLconf에서 polls.urls 모듈을 바라보게 설정합니다. mysite/urls.py 파일을 열고, django.urls.include를 import하고, urlpatterns 리스트에 include() 함수를 다음과 같이 추가합니다.

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로 전달합니다.

이제 index뷰가 URLconf에 연결되었습니다. 잘 작동하는지 확인하기 위해 다음 명령을 입력해 보세요.

python manage.py runserver

브라우져에서 index 뷰에 정의한 것이 보일 것입니다.

paht() 함수에는 2개의 필수 인수인 route와 view, 2개의 선택 가능한 인수로 kwargs와 name까지 모두 4개의 인수가 전달 될 수 있습니다. 이 시점에서 인수들이 무엇을 의미하는지 살펴보는 것은 의미가 있습니다.

path() 인수: route
route는 URL 패턴을 가진 문자열입니다. 요청이 처리될 때, Django는 urlpatterns의 첫번째 패턴부터 시작하여, 일치하는 패턴을 찾을 때까지 요청된 URL을 각 패턴과 리스트 순서대로 비교합니다.

path() 인수: view
Django에서 일치하는 패턴을 찾으면, HttpRequest 객체를 첫번째 인수로 하고, 경로로부터 캡처된 값을 키워드 인수로하여 특정한 view 함수를 호출합니다.

path() 인수: kwargs
임의의 키워드 인수들은 목표한 view에 사전형을 전달됩니다.

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

참고

장고 공식 문서
https://docs.djangoproject.com/ko/4.0/intro/tutorial01/

profile
⌨️ 백엔드개발자 (컴퓨터공학과 졸업)

0개의 댓글