Django의 기본 폼 기능을 사용하지 않고, HTML에서 직접 form 태그로 사용자 입력을 받고, 뷰에서 데이터를 수동으로 처리하는 방식.
#accounts/templates/register.html
<form method="post">
{% csrf_token %}
<label>Username:</label>
<input type="text" name="username">
<label>Password:</label>
<input type="password" name="password">
<input type="submit" value="Register">
</form>
#accounts/views.py
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from django.contrib.auth import login
def register(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = User.objects.create_user(username=username, password=password)
login(request, user)
return redirect('home')
return render(request, 'register.html')
Django의 forms.Form 클래스를 사용하여 사용자 입력을 검증하고 처리할 수 있음.
#accounts/forms.py
from django import forms
class RegisterForm(forms.Form):
username = forms.CharField(max_length=150)
password = forms.CharField(widget=forms.PasswordInput)
#accounts/views.py
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from .forms import RegisterForm
from django.contrib.auth import login
def register(request):
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = User.objects.create_user(username=username, password=password)
login(request, user)
return redirect('home')
else:
form = RegisterForm()
return render(request, 'register.html', {'form': form})
#accounts/templates/register.html
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Register">
</form>
Django에서 제공하는 기본 UserCreationForm을 사용하여 회원가입을 처리하는 방식.
# accounts/views.py
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect
from django.contrib.auth import login
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect('home')
else:
form = UserCreationForm()
return render(request, 'register.html', {'form': form})
#accounts/templates/register.html
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Sign Up">
</form>
장점:
단점:
Django의 클래스 기반 뷰(CBV)를 사용하여 보다 구조화된 회원가입 처리를 수행.
#accounts/views.py
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views.generic import CreateView
class RegisterView(CreateView):
form_class = UserCreationForm
template_name = 'register.html'
success_url = reverse_lazy('home')
#accounts/urls.py
from django.urls import path
from .views import RegisterView
urlpatterns = [
path('register/', RegisterView.as_view(), name='register'),
]
#accounts/templates/register.html
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Sign Up">
</form>
뷰 로직이 자동화되어 세부적인 컨트롤이 어려울 수 있음
| 방법 | 장점 | 단점 | 추천 용도 |
|---|---|---|---|
| HTML 직접 사용 | 간단하고 빠르게 구현 가능 | 유효성 검사 및 보안 취약 | 단순한 테스트용 |
| forms.Form 사용 | 커스텀 검증 및 관리 용이 | 기본적인 사용자 관리 기능 직접 구현 필요 | 사용자 지정 검증이 필요한 경우 |
| UserCreationForm 사용 | 기본 검증 및 비밀번호 검증 자동 제공 | 기본 폼 커스터마이징이 필요함 | 간단한 회원가입 기능 |
| CBV 사용 | 코드 구조화 및 유지보수 용이 | 세부적인 컨트롤 어려움 | 대규모 프로젝트 및 재사용이 필요한 경우 |