2 분 소요

[Django]개념 및 실습

Django 기본 개념과 실습: Polls 앱 만들기

image-20241007015233582

Django는 파이썬 기반의 웹 프레임워크로, 간편하고 빠르게 웹 애플리케이션을 만들 수 있는 강력한 도구입니다. 이번 포스팅에서는 Django의 기초 개념과 실습을 통해 Polls 앱을 만들어보며 Django의 주요 기능들을 익혀보겠습니다.

1. Django 프로젝트 및 앱 생성하기

Django에서 “프로젝트”는 하나의 웹 애플리케이션 전체를 뜻하며, “앱”은 프로젝트 내에서 특정 기능을 담당하는 작은 모듈입니다. 이번 실습에서는 “polls”라는 앱을 만들어 질문과 선택지를 다루는 간단한 투표 시스템을 구현해보겠습니다.

프로젝트 생성

먼저, Django 프로젝트를 생성합니다.

$ django-admin startproject mysite

이 명령어를 실행하면 mysite라는 프로젝트가 생성됩니다. 이제 이 프로젝트 내부에 polls라는 이름의 앱을 만들어봅시다.

앱 생성

$ python manage.py startapp polls

polls 앱이 생성되면, 기본적인 설정과 함께 모델, 뷰, URL 등을 설정해줘야 합니다.

2. 뷰(Views) 생성

앱을 만들었다면, 이제 사용자가 접근할 수 있는 URL을 설정하고, 해당 URL에 대한 응답을 보내는 뷰를 작성해야 합니다. 뷰는 사용자의 요청을 받아 적절한 응답(HTML, JSON 등)을 반환하는 함수 또는 클래스를 의미합니다.

뷰 작성 (polls/views.py)

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. This is the polls app!")

index 뷰는 사용자가 요청했을 때 “Hello, world.”라는 응답을 보내줍니다. 이 뷰를 사용하기 위해선 URL과 연결해야 합니다.

3. URL 연결

Django에서는 URL 패턴을 urls.py 파일을 통해 정의합니다. 먼저, 프로젝트의 urls.pypolls 앱의 URL을 포함시킵니다.

mysite/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('polls/', include('polls.urls')),  # polls 앱의 URL 포함
]

그리고 polls 앱에 별도의 urls.py 파일을 생성해 다음과 같이 작성합니다.

polls/urls.py

from django.urls import path
from . import views

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

이제 사용자가 http://localhost:8000/polls/에 접속하면, index 뷰가 호출되고 “Hello, world.” 메시지를 확인할 수 있습니다.

4. 데이터베이스 모델 생성

Django의 핵심 기능 중 하나는 ORM(Object Relational Mapping)입니다. 이를 통해 복잡한 SQL 쿼리를 작성하지 않고도, 파이썬 코드로 데이터베이스 테이블을 다룰 수 있습니다.

모델 정의 (polls/models.py)

from django.db import models

class 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)
  • Question: 질문을 저장하는 테이블로, 질문 내용과 작성 날짜를 저장합니다.
  • Choice: 선택지를 저장하는 테이블로, Question과의 관계(Foreign Key)를 통해 특정 질문에 대한 선택지를 저장합니다.

5. 모델을 데이터베이스에 반영하기

모델을 정의했다면 이를 데이터베이스에 반영하기 위한 마이그레이션(migration) 작업을 해야 합니다.

마이그레이션 생성

$ python manage.py makemigrations polls

이 명령어는 polls 앱의 모델에 대한 마이그레이션 파일을 생성합니다. 이 파일은 데이터베이스에 어떤 테이블을 생성할지에 대한 정보를 담고 있습니다.

SQL로 변환된 명령어 확인하기

$ python manage.py sqlmigrate polls 0001

마이그레이션 파일에서 실제 SQL로 변환된 명령어를 확인할 수 있습니다. Django는 이 명령어를 통해 데이터베이스와 상호작용합니다.

마이그레이션 실행

$ python manage.py migrate

이 명령어를 실행하면, 정의한 모델이 데이터베이스에 반영되어 테이블이 생성됩니다.

6. 추가 뷰 및 URL 설정

새로운 URL을 만들고, 해당 URL에 대한 뷰를 작성해보겠습니다. 이번에는 다른 메시지를 반환하는 뷰를 추가해봅니다.

뷰 수정 (polls/views.py)

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world.")

def some_url(request):
    return HttpResponse("This is another URL!")

URL 설정 (polls/urls.py)

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('some_url/', views.some_url),  # 새로운 URL 설정
]

이제 http://localhost:8000/polls/some_url/에 접속하면 “This is another URL!” 메시지를 볼 수 있습니다.

7. 앱 등록하기

마지막으로, 생성한 polls 앱을 프로젝트에 등록해야 합니다. mysite/settings.py 파일에서 INSTALLED_APPS 항목에 polls 앱을 추가합니다.

mysite/settings.py

INSTALLED_APPS = [
    # ...
    'polls.apps.PollsConfig',  # polls 앱 추가
]

마무리

이번 포스팅에서는 Django의 기본 개념과 함께 polls 앱을 만들며 뷰, URL 설정, 데이터베이스 모델 생성 및 마이그레이션 과정을 살펴보았습니다. Django는 빠르고 쉽게 웹 애플리케이션을 개발할 수 있는 강력한 도구입니다. 앞으로 더 다양한 기능과 심화된 내용을 다루며 Django의 가능성을 확장해봅시다.

다음 포스팅에서는 Django의 관리자(Admin) 기능을 살펴보고, 폼 처리 및 템플릿을 사용하는 방법을 소개하겠습니다!

태그:

카테고리:

업데이트:

댓글남기기