📨 Django Form 동작 흐름 완전 정리

2025. 5. 14. 11:17·기술블로그-Django편

📨 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
'기술블로그-Django편' 카테고리의 다른 글
  • 🧩 Django의 request 객체 쉽게 이해하기 (왜 첫 번째 인자?)
  • 📌 Django URL 패턴 등록 순서 완전 정리
  • 🚦 라우팅(Routing) vs 매핑(Mapping) 완전 정리
  • 📡 클라이언트-서버 요청/응답 흐름 완전 정리
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787)
      • Python (32)
      • 프로젝트 (110)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    livebroadcast
    americanlaw
    travel ban
    titaniumcase
    life reflection
    urbantrends
    newpoliticalparty
    btsdischarge
    btscomeback
    college reunions
    chinanightlife
    trumpmuskclash
    youngprofessionals
    gpterror
    RM
    global politics
    hotcoffeecase
    remittance
    americaparty
    basalcellcarcinoma
    homebartrend
    bts
    classaction
    btsreunion
    lawsuitculture
    뷔
    chatgpterror
    self-growth
    smartphonedurability
    btsjungkook
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📨 Django Form 동작 흐름 완전 정리
상단으로

티스토리툴바