유효성(validation)이란 데이터나 값이 특정 규칙이나 조건을 충족하는지 확인하는 과정이다. 이는 프로그래밍과 데이터 처리에서 중요한 단계로, 입력 데이터가 올바른 형식인지, 예상 조건을 만족하는지 검증한다. 유효성 검사를 통해 데이터의 일관성과 정확성을 보장하며, 프로그램이 안정적으로 동작하도록 돕는다.
Django의 폼 클래스를 사용하여 입력 데이터를 검증할 수 있다. 이는 데이터 유효성 검사를 뷰에서 처리하는 대신, 폼 객체로 캡슐화하여 코드의 재사용성과 가독성을 높인다.
from django import forms
class MyForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
# 뷰에서 사용 예시
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']
# 데이터 처리 로직
else:
form = MyForm()
return render(request, 'my_template.html', {'form': form})
Django 모델은 데이터베이스 테이블과 연결되며, 필드 정의와 함께 기본적인 유효성 검사 규칙을 제공한다.
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
유효성 검사는 데이터 저장 이전에 수행된다.
from django.core.exceptions import ValidationError
def my_view(request):
if request.method == 'POST':
name = request.POST['name']
email = request.POST['email']
try:
my_model = MyModel(name=name, email=email)
my_model.full_clean() # 데이터 유효성 검사 수행
my_model.save() # 데이터베이스에 저장
except ValidationError as e:
# 유효성 검사 실패 시 처리
return render(request, 'my_template.html', {'errors': e.messages})
return render(request, 'my_template.html')
Django의 제네릭 클래스 기반 뷰는 유효성 검사 및 데이터 처리를 자동으로 수행한다. 이를 통해 단순 CRUD 작업을 손쉽게 구현할 수 있다.
from django.views.generic.edit import CreateView
from .models import MyModel
class MyModelCreateView(CreateView):
model = MyModel
fields = ['name', 'email']
template_name = 'my_template.html'
success_url = '/success/' # 성공 시 리다이렉트 경로
Django REST framework의 Serializer는 API 데이터를 검증하고 변환하는 데 사용된다. Serializer를 통해 데이터 유효성 검사를 독립적으로 처리하며, 보다 세밀한 검증과 데이터 변환을 수행할 수 있다.
from rest_framework import serializers
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ['name', 'email']
유효성 검증 예시:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
class MyModelView(APIView):
def post(self, request):
serializer = MyModelSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
검증 단계의 분리
클라이언트로부터 받은 데이터를 Serializer에서 먼저 검증하여 데이터베이스에 영향을 주지 않고 오류를 처리한다.
세밀한 유효성 검사
필드 수준의 검증뿐만 아니라, 복잡한 검증 규칙을 손쉽게 추가할 수 있다.
명확한 API 응답
오류 메시지를 클라이언트에게 명확히 전달하여 디버깅과 유지보수를 용이하게 한다.
데이터베이스 독립성
유효성 검증 규칙이 변경되어도 데이터베이스 스키마나 데이터에 영향을 미치지 않아 유연한 개발이 가능하다.