Django의 폼 시스템은 데이터를 안전하게 받고 검증하는 도구입니다. 이 글에서는 Django Forms가 무엇인지, 왜 필요한지, 그리고 기본적인 사용법을 살펴보겠습니다. 초심자도 이해할 수 있도록 자세히 설명하겠습니다.

Django Forms의 정의
Django Forms는 사용자로부터 데이터를 입력받아 처리하고, 검증하는 도구입니다. 이를 통해 사용자의 잘못된 입력이나 보안 문제를 방지할 수 있습니다.
Django Forms가 제공하는 기능
- HTML 폼 생성: 서버에서 폼을 동적으로 생성합니다.
- 유효성 검사: 입력 데이터의 형식을 자동으로 검증합니다.
- 데이터 처리: 입력받은 데이터를 Python 객체로 변환합니다.
폼이 왜 필요한가?
1. HTML 폼의 한계
HTML 폼 자체로는 사용자의 입력 데이터를 처리할 수 없습니다. 서버가 데이터를 수동으로 처리하고 검증해야 하며, 이는 번거롭고 보안 취약점이 발생할 가능성이 큽니다.
2. Django Forms의 장점
- 자동 검증: 필수 입력, 형식 검사(예: 이메일 형식) 등을 자동으로 처리합니다.
- 보안 강화: CSRF 보호 기능을 기본 제공합니다.
- 생산성 향상: 복잡한 폼 로직을 간단히 구현할 수 있습니다.
Django Forms의 주요 구성 요소
1. forms.Form
forms.Form
은 Django에서 독립적으로 데이터를 검증하고 처리하는 폼 클래스를 제공합니다.
예제: 간단한 폼
from django import forms
class SimpleForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
name
: 최대 길이가 100자인 문자열 필드.email
: 이메일 형식을 검증하는 필드.
2. forms.ModelForm
forms.ModelForm
은 Django 모델과 연결된 폼으로, 데이터베이스와의 상호작용을 간소화합니다. 이를 통해 모델 인스턴스를 자동으로 생성하거나 업데이트할 수 있습니다.
예제: 모델 기반 폼
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content']
model
: 연결할 Django 모델.fields
: 모델 필드 중 폼에 포함할 필드.
3. 필드와 위젯
- 필드: 입력 데이터를 검증하고 저장하기 위한 클래스.
- 위젯: HTML 폼 요소를 렌더링하는 데 사용합니다.
주요 필드와 위젯
필드 | 설명 | 기본 위젯 |
---|---|---|
CharField |
문자열 입력 필드 | TextInput |
EmailField |
이메일 형식 입력 필드 | EmailInput |
IntegerField |
정수 입력 필드 | NumberInput |
ChoiceField |
선택 입력 필드 | Select |
기본 폼 생성 예제
폼 클래스 정의
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=50)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
뷰에서 폼 처리
from django.shortcuts import render
from .forms import ContactForm
def contact_view(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# 처리 로직 (예: 이메일 발송)
name = form.cleaned_data['name']
email = form.cleaned_data['email']
message = form.cleaned_data['message']
print(f"Name: {name}, Email: {email}, Message: {message}")
else:
form = ContactForm()
return render(request, 'contact.html', {'form': form})
템플릿에서 폼 렌더링
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{{ form.as_p }}
: 폼 필드를<p>
태그로 감싸 렌더링합니다.
사용자 입력 처리 흐름 요약
- 폼 렌더링: 뷰에서 생성한 폼 객체를 템플릿에 전달합니다.
- 사용자 입력 제출: HTML 폼을 통해 데이터를 POST 요청으로 전송합니다.
- 유효성 검사: 뷰에서
form.is_valid()
를 호출하여 데이터를 검증합니다. - 데이터 처리: 폼은 내장된
clean()
메서드를 이용하여 자동으로 검증된 데이터를cleaned_data
로 반환합니다. - 필요시 추가 검증:
clean_
메서드를 작성하여 특정 필드의 추가 검증을 수행할 수 있습니다.() - 데이터 저장:
form.save()
를 호출하여 데이터를 저장합니다 (ModelForm의 경우).
1편을 마치며
Django Forms는 데이터를 안전하게 받고 처리하는 데 필수적인 도구입니다. 이번 글에서는 기본적인 원리와 사용법을 다뤘습니다. 다음 편에서는 forms.Form
과 forms.ModelForm
의 차이점과 실제 사용 사례를 통해 더 깊이 있는 내용을 살펴보겠습니다.
Add a New Comment