Python/Django

Django Form 기본 개념 및 활용법 (forms.py)

임베디드 친구 2025. 11. 3. 19:28
반응형

Django Form 기본 개념 및 활용법 (forms.py)

Django에서 웹 애플리케이션을 개발할 때, 사용자 입력을 효율적으로 처리하는 방법 중 하나가 Django Form입니다. Form은 사용자 입력 데이터를 검증하고, HTML 양식을 자동으로 생성하는 기능을 제공합니다. 이번 포스팅에서는 Django의 forms.py를 활용하는 기본 개념과 예제 코드를 소개하겠습니다.


1. Django Form의 개념

Django의 Form은 django.forms 모듈을 사용하여 구현되며, HTML 입력 필드를 정의하고 데이터를 검증하는 역할을 합니다. 기본적으로 ModelForm과 일반 Form 두 가지 방식으로 사용됩니다.

  • 일반 Form: 데이터베이스 모델과 독립적으로 동작하며, 사용자 입력을 검증하는 데 사용됩니다.
  • ModelForm: Django의 모델과 연결되어 있으며, 데이터베이스와 상호작용할 때 사용됩니다.

2. Django Form 생성 (forms.py)

Django에서 Form을 생성하려면 forms.py 파일을 만들고 forms.Form 클래스를 상속받아 정의해야 합니다.

2.1 일반 Form 예제

from django import forms

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

이제 ContactForm은 이름, 이메일, 메시지를 입력받는 Form이 되며, Django의 forms.CharField, forms.EmailField 등을 활용하여 필드를 정의할 수 있습니다.


3. Form을 뷰(View)에서 처리하기

Django Form은 views.py에서 데이터를 처리하는 방식으로 사용됩니다. 일반적으로 GET 요청에서는 빈 Form을 렌더링하고, POST 요청에서는 사용자 입력을 받아 검증한 후 저장하거나 응답을 처리합니다.

3.1 views.py에서 Form 처리하기

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}, 이메일: {email}, 메시지: {message}")
            return render(request, 'contact_success.html', {'name': name})
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

위 코드에서 form.is_valid()를 통해 입력값의 유효성을 검사한 후, cleaned_data 속성을 사용하여 값을 가져올 수 있습니다.


4. HTML 템플릿에서 Form 사용하기

Django의 템플릿에서 form.as_p, form.as_table, form.as_ul을 사용하여 자동으로 HTML 폼을 렌더링할 수 있습니다.

4.1 contact.html 템플릿 예제

<!DOCTYPE html>
<html>
<head>
    <title>연락하기</title>
</head>
<body>
    <h2>연락처 입력</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">제출</button>
    </form>
</body>
</html>

위 예제에서 {{ form.as_p }}를 사용하여 Form을 자동으로 HTML <p> 태그 형식으로 출력하도록 했습니다. 또한 CSRF 보호를 위해 {% csrf_token %}을 추가해야 합니다.


5. ModelForm을 활용한 Form 생성

Django에서는 모델과 연결된 Form을 만들 때 forms.ModelForm을 사용하면 더 간편하게 데이터를 다룰 수 있습니다.

5.1 모델 정의 (models.py)

from django.db import models

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

5.2 ModelForm 정의 (forms.py)

from django import forms
from .models import Contact

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

위와 같이 ModelForm을 사용하면, 모델과 연동된 Form을 간단하게 생성할 수 있습니다.


6. Django Form 유효성 검사 (Validation)

Django의 Form에서는 기본적인 유효성 검사 기능을 제공하지만, 추가적인 검증이 필요할 경우 clean_<field_name> 메서드를 사용하여 커스텀 검증을 구현할 수 있습니다.

6.1 사용자 정의 유효성 검사 예제

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

    def clean_email(self):
        email = self.cleaned_data.get('email')
        if "@example.com" in email:
            raise forms.ValidationError("example.com 도메인은 사용할 수 없습니다.")
        return email

위 코드에서 clean_email 메서드를 정의하여 특정 도메인의 이메일 주소를 허용하지 않도록 설정할 수 있습니다.


7. 결론

Django의 Form은 사용자 입력을 효과적으로 처리하고 검증하는 강력한 도구입니다. 이번 포스팅에서는 Django Form의 기본 개념부터 forms.py를 활용한 예제, ModelForm, 유효성 검사까지 살펴보았습니다.

Django 프로젝트에서 사용자 입력을 다룰 때 Form을 적극적으로 활용하면 보다 안전하고 효율적인 웹 애플리케이션을 개발할 수 있습니다.

반응형