📨 Django Form 동작 흐름 완전 정리
✅ 1. Form의 핵심 역할
역할 설명
🎨 렌더링 | HTML <form>으로 변환되어 클라이언트에게 보여짐 |
📨 입력값 처리 | 사용자가 보낸 데이터로 폼을 채우고 유효성 검사 + 저장 |
✅ 2. Form 렌더링 단계 (GET 요청)
# views.py
context = {"form": ShortURLForm} # 폼 클래스 자체 전달
return render(request, "home.html", context)
<!-- home.html -->
<form method="POST">
{% csrf_token %}
{{ form }} <!-- 자동으로 input, label 등 출력 -->
</form>
✔️ 브라우저에 HTML 폼이 렌더링됨 → 사용자가 URL 입력 가능
✅ 3. 입력값 처리 단계 (POST 요청)
# views.py
if request.method == "POST":
form = ShortURLForm(request.POST) # 입력값 바인딩
if form.is_valid():
short_url = form.save(commit=False) # 모델 객체 생성 (임시)
short_url.generate_code() # 코드 생성 메서드 호출
short_url.save() # DB에 저장
return redirect('home') # 홈으로 리다이렉트
- request.POST로부터 사용자 데이터 수신
- form.is_valid()로 유효성 검사
- form.save()로 모델 인스턴스 저장
- 성공 시 redirect()로 이동 (PRG 패턴)
forms.py 에서 아래와같이 생성된 모델을 가지고올수있다
class ShortURLForm(forms.ModelForm):
class Meta:
model = ShortURL
fields = ["original_url"]
labels = {"original_url":"Original URL"}
✅ 4. PRG 패턴이란?
✔️ Post → Redirect → Get 구조로
중복 폼 제출 방지! 새로고침해도 POST 재전송 X
사용자 입력 (POST)
↓
서버 처리 후 redirect('home')
↓
클라이언트가 GET / 로 다시 요청
✅ 5. 전체 흐름 요약
[GET 요청]
- 빈 폼 렌더링 (context 전달)
[POST 요청]
- 사용자 데이터 → form 채움 → is_valid()
- 유효하면 save() → redirect()
- 실패하면 form.errors 포함해서 다시 렌더링
✅ 6. 실전 사용 시 팁
- {{ form.as_p }}, as_table, as_ul 등 다양한 렌더링 방법 사용 가능
- commit=False → 저장 전 추가 로직 삽입 가능
- redirect('home')를 위해 urls.py에서 name 설정 필수
path('', views.home_view, name='home')
폼을 제대로 이해하면 Django에서 사용자 입력을 안전하고 구조적으로 처리할 수 있어요 💡
'기술블로그-Django편' 카테고리의 다른 글
🧩 Django의 request 객체 쉽게 이해하기 (왜 첫 번째 인자?) (0) | 2025.05.14 |
---|---|
📌 Django URL 패턴 등록 순서 완전 정리 (0) | 2025.05.14 |
🚦 라우팅(Routing) vs 매핑(Mapping) 완전 정리 (0) | 2025.05.14 |
📡 클라이언트-서버 요청/응답 흐름 완전 정리 (0) | 2025.05.14 |
🔗 HTTP 메서드 + URL + request body 구조 정보 정리 (REST API 기반) (0) | 2025.05.14 |