캡차(Captcha)는 현대 웹사이트에서 사용자 검증을 위해 가장 널리 사용되는 방법 중 하나입니다. 봇이나 악성 트래픽을 차단하는 데 매우 효과적이어서 수많은 웹사이트가 이를 활용하고 있습니다. Google reCAPTCHA를 사용할 수도 있지만, 설정 과정이 다소 번거로울 수 있습니다. 다행히 Django에서는 django-simple-captcha라는 라이브러리를 통해 훨씬 간단한 방법으로 캡차를 구현할 수 있습니다.
이 글에서는 Django 웹사이트에 캡차를 만들고 적용하는 방법을 단계별로 알아보겠습니다.
구현 예제
먼저 Django 프로젝트와 앱을 생성합니다.
그다음 django-simple-captcha 라이브러리를 설치합니다:
pip install django-simple-captcha
settings.py 파일을 열고 INSTALLED_APPS 목록에 본인의 앱 이름과 "captcha" 모듈을 추가합니다:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"captchaproject", # 내 앱 이름
"captcha" # 캡차 모듈
]이렇게 하면 캡차가 하나의 앱으로 프로젝트에 등록됩니다.
프로젝트 루트 디렉터리의 urls.py에 다음 코드를 추가합니다:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include("captchaproject.urls")),
path('captcha/', include("captcha.urls"))
]이 설정을 통해 내 앱의 URL과 함께 캡차 검증이 이루어질 전용 URL도 등록됩니다.
앱의 메인 디렉터리에 forms.py 파일을 생성하고 아래와 같이 작성합니다:
from django import forms
from captcha.fields import CaptchaField
class MyForm(forms.Form):
captcha = CaptchaField()여기서 CaptchaField를 포함한 폼 클래스를 정의했습니다.
작업 후에는 반드시 python manage.py migrate 명령을 실행하여 데이터베이스 마이그레이션을 완료해야 합니다. 캡차는 검증 정보를 데이터베이스에 저장하기 때문에 이 단계가 필수입니다.
이제 앱의 views.py에 다음 코드를 추가합니다:
from django.shortcuts import render
from .forms import MyForm
# Create your views here.
def home(request):
if request.method == "POST":
form = MyForm(request.POST)
if form.is_valid():
print("success") # 캡차 검증 성공
else:
print("fail") # 캡차 검증 실패
form = MyForm()
return render(request, "home.html", {"form": form})home 뷰에서 폼을 렌더링하며, POST 요청이 들어오면 폼 유효성 검사를 통해 캡차를 확인하고 그 결과를 출력합니다.
templates 디렉터리(HTML, CSS 파일을 관리하는 폴더)에 HTML 파일을 생성하고 다음 코드를 작성합니다:
<!DOCTYPE html>
<html>
<head>
<title>캡차 예제</title>
</head>
<body>
<form method="POST" novalidate>
{%csrf_token%}
{{form.captcha}}
<input type="submit" value="제출">
</form>
</body>
</html>이것이 캡차 폼을 화면에 렌더링하는 프런트엔드 부분입니다. {%csrf_token%} 태그는 CSRF 공격을 방지하기 위해 반드시 포함해야 합니다.
모든 설정이 끝났습니다. 서버를 실행하고 브라우저에서 결과를 확인해 보세요. 이미지가 표시되고, 올바른 문자를 입력하면 성공 메시지가 출력됩니다.
실행 결과

이처럼 django-simple-captcha 라이브러리를 활용하면 Google reCAPTCHA 없이도 몇 줄의 코드만으로 웹사이트에 강력한 보안 문자 기능을 손쉽게 구현할 수 있습니다. 회원가입, 로그인, 댓글 작성 등 봇 스팸이 우려되는 모든 폼에 응용해 보시기 바랍니다.