DJango 서버개발, Django 설치 및 프로젝트 시작하기

Django는 파이썬으로 작성된 무료 오픈 소스 웹 프레임워크로, 신속한 웹 개발을 목표로 하고 있습니다. Django는 ‘하나의 규약, 다수의 가능성’ 원칙에 따라 작동하여, 개발자가 간단하게 웹 애플리케이션을 구축할 수 있도록 돕습니다. 이 글에서는 Django를 설치하고 프로젝트를 시작하는 방법을 단계별로 설명하겠습니다.

1. Django 설치하기

Django를 설치하기 위해서는 Python이 필요합니다. Django는 Python 3.x 버전과 호환됩니다. Python이 설치되어 있는지 확인하려면, 다음 명령어를 터미널에 입력하세요:

python --version

만약 Python이 설치되어 있지 않다면, 공식 웹사이트(python.org)에서 다운로드하여 설치하세요. Python 설치 후, pip(파이썬 패키지 관리자)를 사용하여 Django를 설치할 수 있습니다. 다음 명령어를 입력하여 Django를 설치합니다:

pip install django

설치가 완료되면, Django의 버전을 확인하여 올바르게 설치되었는지 검증할 수 있습니다:

django-admin --version

2. Django 프로젝트 시작하기

Django 프로젝트를 시작하기 위해서는 먼저 새로운 Django 프로젝트를 생성해야 합니다. 다음 명령어를 사용하여 프로젝트를 생성합니다:

django-admin startproject myproject

위 명령어에서 myproject는 프로젝트의 이름입니다. 원하는 다른 이름을 사용할 수도 있습니다. 명령어가 실행되면, 프로젝트 디렉토리가 생성됩니다. 해당 디렉토리로 이동합니다:

cd myproject

프로젝트 디렉토리에는 다음과 같은 파일 구조가 생성됩니다:

  • manage.py: Django 프로젝트를 관리하기 위한 명령줄 유틸리티 파일입니다.
  • myproject/: 프로젝트의 설정 및 기타 파일이 포함된 폴더입니다.
  • __init__.py: 이 디렉토리가 파이썬 패키지임을 알리는 빈 파일입니다.
  • settings.py: Django 프로젝트의 설정 파일입니다.
  • urls.py: URL 매핑을 설정하는 파일입니다.
  • wsgi.py: WSGI 웹 서버와 연결하기 위한 파일입니다.

3. Django 개발 서버 실행

프로젝트의 모든 설정이 완료되었으므로, 이제 Django 개발 서버를 실행할 차례입니다. 아래 명령어를 입력하여 개발 서버를 시작할 수 있습니다:

python manage.py runserver

서버가 성공적으로 시작되면, 웹 브라우저에서 http://127.0.0.1:8000을 입력하여 웹 애플리케이션을 확인할 수 있습니다. Django의 기본 환영 페이지가 나타나면, 서버가 정상적으로 작동하는 것입니다.

4. 기본 앱 만들기

Django에서는 웹 애플리케이션의 기본 단위가 앱입니다. 각 앱은 특정 기능을 다루며, 웹 애플리케이션 내에서 재사용할 수 있습니다. 새로운 앱을 만들기 위해서는 다음 명령어를 사용합니다:

python manage.py startapp myapp

이 명령어를 실행하면 myapp이라는 새로운 디렉토리가 생성됩니다. 디렉토리 구조는 다음과 같습니다:

  • migrations/: 데이터베이스 스키마 변경 사항을 저장하는 폴더입니다.
  • admin.py: Admin interface를 위한 설정 파일입니다.
  • apps.py: 앱의 설정을 정의하는 파일입니다.
  • models.py: 데이터베이스 모델을 정의하는 파일입니다.
  • tests.py: 앱의 테스트를 작성하는 파일입니다.
  • views.py: 요청을 처리하고, 응답을 생성하는 뷰를 정의하는 파일입니다.

5. 앱 등록하기

생성한 앱을 Django 프로젝트에 등록하기 위해서는 settings.py 파일을 수정해야 합니다. 해당 파일에서 INSTALLED_APPS 항목에 앱의 이름을 추가합니다:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # 추가된 앱
]

6. 간단한 뷰 만들기

뷰는 사용자의 요청을 처리하고 응답을 생성하는 Django의 핵심 구성 요소입니다. views.py 파일에 간단한 뷰 함수를 작성해보겠습니다:

from django.http import HttpResponse

def home(request):
    return HttpResponse("안녕하세요, Django!")

작성한 뷰를 URL에 매핑하려면 urls.py를 수정합니다. Django 프로젝트의 urls.py 파일을 열고, 아래와 같이 코드를 추가합니다:

from django.contrib import admin
from django.urls import path
from myapp.views import home  # 방금 만든 뷰를 가져옵니다.

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name='home'),  # 메인 URL에 home 뷰를 매핑합니다.
]

7. 서버 재시작 및 확인

뷰와 URL 설정을 완료한 후, 서버를 재실행합니다:

python manage.py runserver

웹 브라우저에서 http://127.0.0.1:8000을 입력하면 “안녕하세요, Django!”라는 메시지가 표시됩니다. 이제 Django 웹 애플리케이션의 기본 구성 요소를 성공적으로 구축했습니다.

8. 데이터베이스 설정

Django는 여러 데이터베이스를 지원하지만, 기본적으로 SQLite를 사용합니다. 데이터베이스 설정을 변경하려면 settings.py 파일의 DATABASES 섹션을 수정해야 합니다. 예를 들어, PostgreSQL을 사용하고 싶다면 다음과 같이 설정할 수 있습니다:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

PostgreSQL을 사용하기 위해서는 해당 데이터베이스에 대한 드라이버를 설치해야 합니다:

pip install psycopg2

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

데이터베이스와 상호작용하기 위해서는 모델을 생성해야 합니다. models.py 파일에 아래와 같이 모델을 정의해봅시다:

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

모델을 정의한 후, 데이터베이스에 적용하기 위해 마이그레이션을 생성하고 실행해야 합니다:

python manage.py makemigrations
python manage.py migrate

10. 관리자 인터페이스 사용하기

Django는 기본적으로 강력한 관리자 인터페이스를 제공합니다. 이를 사용하기 위해서는 항상 관리자 계정을 만들어야 합니다. 관리자 계정을 생성하려면 다음 명령어를 실행합니다:

python manage.py createsuperuser

생성된 관리자 계정으로 개발 서버를 실행 후 웹 브라우저에서 http://127.0.0.1:8000/admin에 접속하여 로그인합니다. 관리자 인터페이스에 들어가면, 방금 생성한 Article 모델을 관리할 수 있습니다.

11. 결론

Django를 설치하고 프로젝트를 시작하는 방법에 대해 알아보았습니다. Django는 웹 개발을 간소화하기 위해 많은 기능과 강력한 도구를 제공합니다. 앱 개발, 데이터베이스 모델링, 관리자 인터페이스 등 다양한 기능을 통해 효과적으로 웹 애플리케이션을 구축할 수 있습니다. 다음 단계로는 Django의 고급 기능을 탐색하거나 외부 라이브러리를 통해 애플리케이션을 더 확장해볼 수 있습니다.

이제 Django를 활용하여 나만의 웹 애플리케이션을 개발할 준비가 되었습니다. 지속적인 학습과 실험을 통해 자신의 기술을 발전시키시길 바랍니다!

감사합니다.

DJango 서버개발, Django REST Framework에서 API 문서화 도구 (Swagger, CoreAPI) 사용하기

Django는 파이썬 기반의 웹 프레임워크로서, 강력하고 유연한 백엔드 서버 개발을 가능하게 합니다. Django REST Framework (DRF)는 Django에 RESTful API를 쉽게 구현할 수 있도록 도와주는 도구입니다. 그러나 API의 문서화는 종종 간과되는 부분이며, 이는 API의 사용성을 저하시킬 수 있습니다. 이에 따라 Swagger와 CoreAPI와 같은 API 문서화 도구를 사용하는 방법을 살펴보겠습니다.

1. Django REST Framework 소개

Django REST Framework는 Django로 RESTful API를 쉽게 구축할 수 있게 해주는 고급 라이브러리입니다. 이 라이브러리는 다음을 제공합니다:

  • 직관적인 API 설계
  • 강력한 인증 시스템
  • 유연한 시리얼라이징
  • 다양한 필터링 옵션
  • 문서화 지원

이러한 기능 덕분에 DRF를 사용하면 복잡한 API를 보다 쉽게 구축할 수 있습니다.

2. API 문서화의 중요성

API 문서화는 API의 사용법을 명확히 하고, 외부 개발자 또는 팀원들이 API를 효율적으로 사용할 수 있도록 하는 중요한 과정입니다. 잘 문서화된 API는:

  • 사용자 교육을 용이하게 합니다.
  • 버그를 줄일 수 있습니다.
  • 개발 속도를 높입니다.
  • 기타 팀원 간의 소통을 원활하게 합니다.

3. Swagger와 CoreAPI 소개

Swagger는 API 문서화를 위한 가장 널리 사용되는 도구 중 하나입니다. Swagger UI는 API를 시각적으로 보여주고, 사용자들이 요청을 테스트할 수 있는 기능을 제공합니다. 반면, CoreAPI는 DRF와 자연스럽게 통합되어 API 문서화 및 테스트를 쉽게 해줍니다.

3.1 Swagger

Swagger는 API 문서와 테스트 도구를 제공합니다. Swagger를 사용하면 다음과 같은 장점을 누릴 수 있습니다:

  • 사용자 친화적인 UI 제공
  • API 요청/응답 테스트
  • API 문서 자동 생성

3.2 CoreAPI

CoreAPI는 RESTful API의 문서화 및 테스트를 위한 더 경량화된 옵션입니다. DRF와의 통합이 용이하며, API 사양을 정의할 수 있는 간단한 문법을 제공합니다. 핵심 기능으로는 다음이 있습니다:

  • 간단한 사용법
  • API 문서 자동화
  • 완성도 높은 스펙

4. Django 프로젝트에 Swagger 및 CoreAPI 설정하기

Swagger와 CoreAPI를 Django 프로젝트에 통합하는 과정은 아래와 같은 단계로 진행됩니다.

4.1 설정 준비

먼저 기본적인 Django 프로젝트와 Django REST Framework가 설치되어 있어야 합니다. 필요한 패키지를 설치합시다:

pip install djangorestframework
pip install drf-yasg  # Swagger 문서화를 위한 패키지
pip install coreapi  # CoreAPI 이용을 위한 패키지

4.2 Django settings 구성

Django 프로젝트의 settings.py에 다음과 같이 추가합니다:

INSTALLED_APPS = [
        ...
        'rest_framework',
        'drf_yasg',
    ]

4.3 Swagger 설정 예제

Swagger를 설정하기 위해 urls.py에 다음 코드를 추가합니다:

from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

schema_view = get_schema_view(
   openapi.Info(
      title="My API",
      default_version='v1',
      description="API 설명서",
      terms_of_service="https://www.google.com/policies/terms/",
      contact=openapi.Contact(email="contact@myapi.local"),
      license=openapi.License(name="BSD License"),
   ),
   public=True,
   permission_classes=(permissions.AllowAny,),
)

urlpatterns = [
    ...
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
] 

4.4 CoreAPI 설정 예제

CoreAPI를 사용하기 위한 설정은 좀 더 간단합니다. urls.py에 다음 코드를 추가합니다:

from rest_framework.documentation import include_docs_urls

urlpatterns = [
    ...
    path('docs/', include_docs_urls(title='My API title')),
]

5. API 문서화 예제

이제 간단한 API를 만들어 문서화를 테스트해 보겠습니다. 간단한 메모리 저장소 API를 만들어 보겠습니다.

5.1 모델 정의

먼저, API를 위한 모델을 정의합니다. models.py에 아래와 같이 작성합니다:

from django.db import models

class Note(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

    def __str__(self):
        return self.title

5.2 시리얼라이저 정의

모델과 연결될 시리얼라이저를 생성합니다. serializers.py를 생성하거나 사용하여 아래와 같이 작성합니다:

from rest_framework import serializers
from .models import Note

class NoteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Note
        fields = '__all__'

5.3 뷰 정의

API의 로직을 정의할 뷰를 만들어야 합니다. views.py를 수정하여 아래와 같이 작성합니다:

from rest_framework import viewsets
from .models import Note
from .serializers import NoteSerializer

class NoteViewSet(viewsets.ModelViewSet):
    queryset = Note.objects.all()
    serializer_class = NoteSerializer

5.4 URL 패턴 정의

이제 API의 URL 패턴을 설정합니다. urls.py에 아래와 같이 작성합니다:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import NoteViewSet

router = DefaultRouter()
router.register(r'notes', NoteViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

6. API 테스트 및 문서화

모든 설정이 완료되었습니다. Django 서버를 실행하고 http://localhost:8000/swagger/ 또는 http://localhost:8000/docs/에 접속하여 API 문서화 상태를 확인해보세요. 각 엔드포인트에서 제공하는 API 문서와 함께 요청을 테스트할 수 있습니다.

7. 결론

Django REST Framework와 Swagger, CoreAPI를 사용하여 API 문서화를 효율적으로 진행할 수 있습니다. 이러한 도구들은 개발자의 생산성을 높이고, 다른 사용자에게도 유용한 정보를 제공합니다. 프로젝트의 복잡성이 증가함에 따라 API 문서화는 점점 더 중요해지며, 따라서 이러한 도구들을 적극적으로 활용하는 것이 좋습니다.

8. 추가 자료

더 읽어보기:

DJango 서버개발, 모델 생성 및 마이그레이션 과정

Django는 웹 애플리케이션을 신속하게 개발할 수 있도록 설계된 고수준의 파이썬 웹 프레임워크입니다. Django의 핵심 특징 중 하나는 ORM(Object-Relational Mapping)을 통한 간편한 데이터베이스 작업입니다. 이 글에서는 Django 모델 생성과 마이그레이션 과정을 자세히 설명하고, 예제 코드를 통해 이해를 돕겠습니다.

1. Django 모델이란?

모델은 Django의 데이터베이스 구조를 정의하는 클래스입니다. 모델은 데이터베이스의 테이블을 나타내며, 클래스의 속성은 테이블의 필드를 나타냅니다. Django의 ORM을 통해 모델 클래스를 사용하면 SQL 쿼리를 직접 작성하지 않고도 데이터베이스에 접근할 수 있습니다.

1.1 모델 정의 예제

간단한 블로그 애플리케이션을 위한 ‘Post’ 모델을 정의해 보겠습니다. 이 모델은 블로그 게시글의 제목, 내용, 작성자, 작성일 등의 정보를 포함합니다.

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)  # 제목 필드
    content = models.TextField()               # 내용 필드
    author = models.CharField(max_length=100)  # 작성자 필드
    created_at = models.DateTimeField(auto_now_add=True)  # 작성일 필드

    def __str__(self):
        return self.title  # 객체의 문자열 표현

2. 모델 생성 과정

모델을 정의한 후, 해당 모델을 데이터베이스에 반영하기 위해 마이그레이션(migration) 과정을 거쳐야 합니다. 마이그레이션은 모델을 데이터베이스 테이블로 변환하는 과정입니다.

2.1 앱 생성

먼저 Django 프로젝트에 앱을 만들어야 합니다. 앱은 Django 프로젝트 내에서 특정 기능을 수행하는 모듈입니다. 터미널에서 아래 명령어를 실행하여 ‘blog’라는 이름의 앱을 생성합니다.

python manage.py startapp blog

2.2 모델 등록

생성한 앱의 models.py 파일에 ‘Post’ 모델을 추가한 후, Django 프로젝트의 settings.py 파일에 앱을 등록해야 합니다.

# settings.py 파일 수정
INSTALLED_APPS = [
    # ...
    'blog',
]

3. 마이그레이션 생성

모델을 정의하고 앱을 등록하면, 다음으로는 마이그레이션 파일을 생성해야 합니다. 마이그레이션 파일은 모델과 데이터베이스 스키마 간의 차이를 나타내는 파일입니다. 터미널에서 아래와 같은 명령어를 실행합니다.

python manage.py makemigrations

3.1 마이그레이션 확인

마이그레이션을 성공적으로 생성하면 blog/migrations 폴더에 새 파일이 생성된 것을 확인할 수 있습니다. 이 파일은 모델의 변경 사항을 기록하며, 데이터베이스에 적용될 SQL 문을 포함하고 있습니다.

4. 마이그레이션 적용

마이그레이션 파일이 생성된 후, 이 파일을 데이터베이스에 적용하여 테이블을 생성합니다. 다음 명령어를 입력합니다.

python manage.py migrate

4.1 마이그레이션 확인

마이그레이션이 잘 적용되었는지 확인하기 위해 Django 셸에 진입하고, 모델을 가져와 쿼리를 실행해 볼 수 있습니다.

python manage.py shell
from blog.models import Post

# 데이터베이스에 Post 테이블이 생성되었는지 검증
print(Post.objects.all())

5. 데이터 추가 및 조회

마이그레이션이 완료되면, 데이터를 데이터베이스에 추가하고 조회할 수 있습니다. 아래처럼 Django 셸에서 데이터를 추가해보겠습니다.

post = Post(title='첫 번째 게시글', content='안녕하세요, 이것은 첫 번째 게시글입니다.', author='홍길동')
post.save()  # 데이터베이스에 저장

# 모든 Post 객체 조회
all_posts = Post.objects.all()
print(all_posts)

6. 마이그레이션의 역할

마이그레이션은 개발 과정에서 데이터베이스 스키마를 쉽게 관리할 수 있게 도와줍니다. 새로운 필드를 추가하거나 기존 필드를 수정할 때마다 마이그레이션을 수행하여 데이터베이스 상태를 일관되게 유지할 수 있습니다.

6.1 모델 수정 후 마이그레이션

예를 들어, ‘Post’ 모델에 ‘게시글 공개 여부’를 나타내는 ‘is_published’ 필드를 추가한다고 가정해보겠습니다. 다음과 같이 모델을 수정한 후, 다시 마이그레이션을 진행합니다.

class Post(models.Model):
    # 기존 필드...
    is_published = models.BooleanField(default=True)  # 공개 여부 필드

변경 후 마이그레이션 파일을 생성하고 적용합니다.

python manage.py makemigrations
python manage.py migrate

7. 데이터베이스 관리

Django는 SQLite, PostgreSQL, MySQL 등 다양한 데이터베이스를 지원합니다. 데이터베이스를 설정하기 위해 settings.py 파일의 DATABASES 설정을 수정해야 합니다.

7.1 PostgreSQL 설정 예시

PostgreSQL 데이터베이스를 사용하는 경우, settings.py에서 다음과 같이 설정합니다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

8. 결론

이 글에서는 Django에서 모델을 생성하고 마이그레이션하는 과정에 대해 자세히 설명했습니다. Django의 ORM을 활용하면 데이터베이스 작업을 쉽고 효율적으로 수행할 수 있습니다. 앞으로 다양한 모델을 생성하고, 어플리케이션을 확장해 나가는 과정에서 마이그레이션의 중요성을 깨닫게 될 것입니다.

더 나아가, Django의 강력한 기능인 Admin 인터페이스, Serializer, Form 등을 배워가며 데이터 처리를 더욱 간편하게 할 수 있습니다. Django를 통해 웹 개발의 다양한 영역을 탐험하시길 바랍니다!

DJango 서버개발, 폼(Form) 및 모델 폼(ModelForm) 사용하기

Django는 웹 애플리케이션 개발을 빠르고 편리하게 만들어주는 파이썬 웹 프레임워크입니다. 이 글에서는 Django의 폼과 모델 폼 사용에 대해 자세히 알아보겠습니다. 폼은 사용자 입력을 처리하고 유효성을 검사하는 도구로 사용되며, 모델 폼은 Django 모델의 필드를 기반으로 하여 자동으로 폼을 생성하고 관리할 수 있게 해줍니다.

1. Django 폼(Form) 소개

Django의 폼 클래스는 HTML 입력을 처리하는 유용한 방법을 제공합니다. 각 폼 필드는 사용자 입력을 캡처하고 이를 검증하는 기능을 수행합니다. 기본적으로 Django의 폼은 다음과 같은 두 가지 주요 용도로 사용됩니다:

  • 사용자가 입력한 데이터를 검증합니다.
  • 사용자가 입력한 데이터를 서버에서 처리 가능한 형태로 변환합니다.

폼을 생성하려면 django.forms 모듈에서 Form 클래스를 상속받아 사용자 정의 폼 클래스를 만듭니다. 다음은 기본적인 폼 클래스의 예제입니다:

from django import forms

class MyForm(forms.Form):
    name = forms.CharField(label='이름', max_length=100)
    email = forms.EmailField(label='이메일')
    message = forms.CharField(label='메시지', widget=forms.Textarea)
    

이 폼은 이름, 이메일, 메시지를 입력받기 위한 필드를 제공합니다. 각 필드는 `label`, `max_length`와 같은 매개변수를 사용하여 검사 및 속성을 정의할 수 있습니다.

2. 폼 유효성 검사

폼을 사용하면 제출된 데이터의 유효성을 쉽게 검사할 수 있습니다. 데이터가 유효한 경우 is_valid() 메소드를 사용하여 데이터를 수집합니다:

def my_view(request):
    if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
            # 유효성 검사 통과
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']
            # 여기서 데이터를 처리 (예: 이메일 보내기)
            return HttpResponse('제출 성공!')
    else:
        form = MyForm()
    
    return render(request, 'my_template.html', {'form': form})
    

유효성 검사가 통과하면 cleaned_data 속성을 통해 사용자가 입력한 데이터에 접근할 수 있습니다. 데이터 처리 후 성공 메시지를 반환합니다.

3. Django 모델 폼(ModelForm) 소개

모델 폼은 Django의 모델과 연결된 폼입니다. 모델의 필드를 기반으로 폼을 자동으로 생성할 수 있으며, 데이터베이스와의 상호작용을 간소화할 수 있습니다. 모바일 폼을 사용하면 코드의 중복을 줄이고 더 쉽게 데이터를 관리할 수 있습니다.

모델을 정의하고 그에 대응하는 모델 폼을 생성해보겠습니다:

from django.db import models

class Contact(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    message = models.TextField()

from django import forms

class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = ['name', 'email', 'message']
    

위 코드에서 Contact 모델은 이름, 이메일, 메시지를 필드로 가지며, ContactForm 모델 폼은 이 모델의 필드를 기반으로 폼을 생성합니다.

4. 모델 폼 사용법

모델 폼을 사용하는 방법은 일반 폼과 유사합니다. 다음은 제출된 데이터를 처리하는 `views.py`의 예입니다:

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            form.save()  # 데이터베이스에 저장
            return HttpResponse('메시지가 전송되었습니다!')
    else:
        form = ContactForm()

    return render(request, 'contact.html', {'form': form})
    

폼이 제출되고 유효성이 확인되면, save() 메서드를 호출하여 데이터를 데이터베이스에 저장합니다.

5. 템플릿에서 폼 표시하기

이제 생성한 폼을 HTML 템플릿에서 렌더링하는 방법을 살펴보겠습니다. 다음과 같이 템플릿에서 폼을 표시할 수 있습니다:

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">제출</button>
</form>
    

여기서 {{ form.as_p }}는 폼을 단락으로 감싸서 렌더링합니다. 이를 통해 필드가 적절히 포맷됩니다. CSRF 토큰을 잊지 말고 포함시켜야 합니다!

6. 폼 커스터마이징

Django 폼은 기본적으로 간단한 구성을 제공하지만, 필요에 따라 필드를 커스터마이즈할 수 있습니다. 예를 들어, 필드의 스타일이나 템플릿을 변경할 수 있습니다.

class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = ['name', 'email', 'message']
        widgets = {
            'message': forms.Textarea(attrs={'placeholder': '메시지를 입력하세요...'}),
            'name': forms.TextInput(attrs={'class': 'form-control'}),
            'email': forms.EmailInput(attrs={'class': 'form-control'}),
        }
    

위 예제에서는 widgets을 사용하여 각 필드의 HTML 속성을 수정했습니다. 이를 통해 사용자 인터페이스를 더욱 직관적으로 만들 수 있습니다.

7. 필드 검증 및 에러 메시지 처리

폼은 자동으로 유효성 검사를 수행하지만, 당신이 원하는 경우 사용자 정의 검증 로직을 추가할 수도 있습니다. 예를 들어, 이메일 형식이 아닌 경우 사용자 정의 에러 메시지를 표시할 수 있습니다.

class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = ['name', 'email', 'message']

    def clean_email(self):
        email = self.cleaned_data.get('email')
        if "@" not in email:
            raise forms.ValidationError('유효한 이메일 형식이 아닙니다.')
        return email
    

위와 같은 방식으로 clean_ 메서드를 오버라이드하여 특정 필드에 대한 사용자 정의 검증 로직을 추가할 수 있습니다. 유효성 검사에 실패할 경우 발생하는 예외는 자동으로 사용자에게 에러 메시지를 표시하게 됩니다.

8. 결론

Django에서 폼과 모델 폼을 사용하는 것은 웹 애플리케이션의 중요한 부분입니다. 이 글에서 소개한 폼을 생성하고 유효성을 검사하는 방법, 모델 폼을 통해 데이터베이스와 상호작용하는 방법에 대해 명확한 이해를 갖출 수 있었기를 바랍니다. Django는 간단한 텍스트 입력에서 복잡한 데이터 구조에 이르기까지 유연하게 핸들할 수 있도록 돕는 강력한 도구입니다.

여러분의 Django 프로젝트에 도움이 되기를 바라며, 앞으로 더 많은 강좌에서 유용한 정보를 기대해 주세요!