TITEDIOS 편한 코딩

[Django] 시작하기 - 투표 앱 만들기(Django tutorial) 본문

Django

[Django] 시작하기 - 투표 앱 만들기(Django tutorial)

TitediosKW 2024. 10. 25. 19:00
반응형

목차

  1. Django Tutorial 프로젝트 시작
  2. 프로젝트 생성
  3. 개발 서버 실행해 보기
  4. 투표 앱(Polls App) 만들기
  5. 첫 번째 View 만들기
  6. 결론

1. Django Tutorial 프로젝트 시작

본 예제는 Django의 기본적인 투표 사이트를 만드는 것입니다. 투표 사이트는 2가지 파트로 구성되며 각각 public site와 admin site 입니다. 이전 포스팅을 잘 보고 오셨다면 Django는 이미 설치되어 있을 것이라고 생각합니다.

  • Public site: 일반 사용자가 투표 질문을 보고 투표를 하는 view
  • admin site: 관리자가 투표 질문을 추가, 변경, 삭제 하는 기능

2. 프로젝트 생성

프로젝트를 시작하기 위해서는 Django의 뼈대를 만드는 것부터 시작해야 합니다. Django는 프로젝트 뼈대를 만드는 기능을 제공합니다. 우선, 프로젝트 코드를 작성할 디렉토리를 만들고 해당 위치로 이동합니다. 예를 들어, workspace 폴더를 만들고 해당 위치로 이동하면 됩니다. Django는 디렉토리 위치와는 관계가 없으므로 원하는 위치에 만드시면 됩니다.
이후, 아래의 명령어를 수행하여 Django 프로젝트를 만들어 봅시다. 아래의 명령을 수행하면 djangotutorial 디렉토리가 만들어지고 해당 디렉토리 내부에 mysite가 만들어집니다.

mkdir djangotutorial
django-admin startproject mysite djangotutorial

 

명령어를 수행해 만들어진 프로젝트 구조는 다음과 같습니다.

.
+--- manage.py
+--- mysite/
|   +--- asgi.py
|   +--- settings.py
|   +--- urls.py
|   +--- wsgi.py
|   +--- __init__.py

 

각 파일에 대해 간단하게 설명하겠습니다.

  • manage.py: Django 프로젝트를 제어할 수 있는 명령어 도구(command-line utility)입니다. manage.py를 실행하여 다양한 기능을 사용할 수 있습니다.
  • mysite/: Django 프로젝트의 실제적인 패키지가 있는 디렉토리입니다.
  • mysite/__init__.py:
  • mysite/settings.py: Django 프로젝트의 설정값이나 configuration 등이 저장된 파일입니다.
  • mysite/urls.py: URL을 정의하여 사용자가 접근할 수 있는 end-point를 생성합니다. URL 정의를 통해 다양한 기능을 만들 수 있습니다.
  • mysite/asgi.py: 우리 프로젝트를 ASGI-compatible 웹서버에서 사용할 수 있도록 하는 기능을 제공합니다. 비동기 통신에 특화된 기능을 제공합니다.
  • mysite/wsgi.py: 우리 프로젝트를 WSGI-compatible 웹서버에서 사용할 수 있도록 하는 기능을 제공합니다. 웹서버와의 통신을 통해 효율적인 웹 환경을 만들 수 있습니다.

아직은 여기 있는 파일들이 어떤 역할을 하는지 전부 모르셔도 좋습니다. 사실 많은 개발자들이 모든 것을 알고 개발하지 않고 알 수도 없습니다. 다만, 이러한 기능들을 한다는 사실 정도만 인지하신 후 프로젝트를 진행하면서 부딪히는 문제들을 해결할 때 각각에 대한 이해가 더 높아지면서 여러분도 성장하실 것입니다.

반응형

3. 개발 서버 실행해 보기

그럼, 프로젝트를 생성하였으니 바로 우리의 Django 웹을 실행해 봅시다.

 python manage.py runserver

 

실행하면 아래의 화면과 같은 화면을 보실 수 있습니다.

 

이제 서버가 실행 중이므로 웹 브라우저로 http://127.0.0.1:8000/ 에 들어가시면 로켓이 이륙하는 "축하합니다!" 페이지가 표시됩니다. 우리가 만든 Django 개발 서버를 시작했습니다. 반드시 알아두셔야 할 점은 프로덕션 환경(운영환경)과 비슷한 곳에서는 이 서버를 사용하시면 안됩니다. 개발하는 동안만 사용하도록 의도되어 보안 등의 문제가 있을 수 있습니다.


4. 투표 앱(Polls App) 만들기

프로젝트를 생성하였으니 우리가 만들 Polls 앱을 만들어 보겠습니다. 투표 앱을 Django 명령어를 통해 만들고 만들어진 앱에서 우리가 원하는 기능들을 만들어 보겠습니다. 설명은 복잡하지만 실제로 어렵지 않으니까 천천히 따라해 보시기 바랍니다.

python manage.py startapp polls

만들어진 파일 구조는 아래와 같습니다.

.
+--- db.sqlite3
+--- manage.py
+--- mysite
|   +--- asgi.py
|   +--- settings.py
|   +--- urls.py
|   +--- wsgi.py
|   +--- __init__.py
+--- polls
|   +--- admin.py
|   +--- apps.py
|   +--- models.py
|   +--- tests.py
|   +--- views.py
|   +--- __init__.py

polls 디렉토리가 만들어진 것을 확인할 수 있습니다. 이제 view를 작성해 보겠습니다.


5. 첫 번째 View 만들기

polls/views.py 파일을 열고 아래 코드를 작성해 보세요.

# polls/views.py
from django.http import HttpResponse


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

아마 가장 단순한 Django view일 것입니다. 단순하게 문장 하나만 보여주는 것이니까요. 이제 URL을 만들어 해당 페이지에 접근할 수 있도록 해보겠습니다.

 

polls/urls.py 파일을 만들고 아래 코드를 작성해보겠습니다.

# polls/urls.py
from django.urls import path

from . import views

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

이후 mysite/urls.py에 URL 설정을 해줘야합니다. admin과 polls 에 접근할 수 있도록 만들어 주었습니다.

# 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),
]

 

path() 함수는 최소한 두 개의 인수, 즉 route와 view를 받아야 합니다. include() 함수는 다른 URLconf를 참조할 수 있도록 합니다. Django가 include()를 만날 때 해당 지점까지 일치한 URL의 모든 부분을 잘라내고 나머지 문자열을 다른 URLconf로 보냅니다. 여기서는 polls/를 잘라내고 나머지 문자열을 polls/urls.py로 보내게 됩니다.

 

include()의 아이디어는 URL을 plug and play 하기 쉽게 만드는 것입니다. 투표는 자체 URLconf(polls/urls.py)에 있으므로 "/polls/"나 "/fun_polls/", "/content/polls/" 또는 다른 경로 루트에 배치할 수 있으며 앱은 계속 작동합니다.

개발 서버를 실행하고 http://127.0.0.1:8000/polls/에 접근하면 우리가 만든 페이지를 볼 수 있습니다.


결론

우리의 첫 번째 Django 프로젝트를 만들고 polls 앱을 만들어 보았습니다. 단순한 페이지이긴 하지만 우리 손으로 만든 첫 번째 앱이라는 것에 의미가 있을 것입니다. 개발 서버를 실행하여 우리가 만든 작품을 확인하였습니다. 뿌듯함이 느껴지시나요? 다음 포스팅에서는 투표 질문을 추가하는 것을 해볼 것입니다.

 

도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.

 

감사합니다!

반응형