📘 Django에서 as_view()가 필요한 이유 - FBV vs CBV 완전 정리

2025. 5. 19. 11:35·기술블로그-Django편

📘 Django에서 as_view()가 필요한 이유 - FBV vs CBV 완전 정리

✨ 1. 질문 요약

❓ FBV(Function-Based View)는 path()에 그냥 함수 이름을 넣는데,
CBV(Class-Based View)는 왜 꼭 .as_view()를 붙여야 하나요?


🧠 2. 핵심 비교 요약

항목 FBV (함수 기반 뷰) CBV (클래스 기반 뷰)

뷰 타입 함수 (def) 클래스 (class)
URL에 연결 방식 my_view MyView.as_view()
호출 시 동작 직접 호출 내부 메서드 (get, post)에 매핑됨
.as_view() 필요 여부 ❌ 필요 없음 ✅ 필수

🔍 3. FBV: 함수 기반 뷰 예시

def hello_view(request):
    return HttpResponse("Hello World")

urlpatterns = [
    path('', hello_view),  # ✅ 함수 그대로 사용 가능
]
  • hello_view는 그냥 Python 함수이기 때문에 Django가 직접 실행할 수 있습니다.

🧱 4. CBV: 클래스 기반 뷰 예시

from django.views import View

class HelloView(View):
    def get(self, request):
        return HttpResponse("Hello Class")

urlpatterns = [
    path('', HelloView.as_view()),  # ✅ 반드시 as_view() 사용
]
  • HelloView는 클래스이기 때문에, Django는 그 자체로 호출할 수 없습니다.
  • .as_view()를 사용하면 → 내부적으로 클래스를 인스턴스화하고,
    get()이나 post() 같은 메서드를 자동으로 연결해주는 뷰 함수로 변환됩니다.

🔧 5. as_view()는 어떤 일을 할까?

def as_view():
    def view(request):
        self = MyView()               # 클래스 인스턴스 생성
        if request.method == 'GET':
            return self.get(request) # 메서드 매핑
        elif request.method == 'POST':
            return self.post(request)
    return view
  • 실제 코드는 더 복잡하지만 기본 원리는 위와 같습니다.
  • 요청 메서드(GET, POST 등) 에 따라 알맞은 메서드를 실행하는 구조입니다.

⚠️ 6. .as_view()를 안 쓰면?

urlpatterns = [
    path('', HelloView),  # ❌ TypeError 발생
]
  • 클래스는 함수처럼 호출할 수 없기 때문에 Django가 에러를 발생시킵니다:
  • TypeError: 'HelloView' object is not callable

🧠 7. 마무리 요약

항목 정리

FBV는 왜 as_view 필요 없음? 함수니까 Django가 직접 호출 가능
CBV는 왜 as_view 필요? 클래스이므로 요청 처리용 함수로 변환 필요
as_view 역할 클래스 → 요청 가능한 함수로 변환 (메서드 분기 자동처리)

💡 실전 팁

  • CBV를 쓸 땐 항상 as_view()를 붙여야 한다는 걸 습관화하세요.
  • dispatch(), get(), post()를 커스터마이징하면 보다 세밀한 컨트롤도 가능해요.

필요하시면 CBV 내부 구조, dispatch 흐름, DRF에서의 CBV 적용 예시도 함께 정리해드릴게요! 💪

'기술블로그-Django편' 카테고리의 다른 글

🧪 Django shell로 클래스/메서드 유효성 확인하는 방법 총정리  (0) 2025.05.19
🔐 Django에서 make_random_password() 오류 해결기 (Django 5.x 대응)  (0) 2025.05.19
🔐 Django signing.dumps() 완벽 이해하기  (0) 2025.05.19
📌 OAuth2 & 네이버 소셜 로그인 흐름 완전 정리  (0) 2025.05.16
📌 Django-extensions 완전 가이드 - 실전 개발을 위한 필수 도구  (0) 2025.05.16
'기술블로그-Django편' 카테고리의 다른 글
  • 🧪 Django shell로 클래스/메서드 유효성 확인하는 방법 총정리
  • 🔐 Django에서 make_random_password() 오류 해결기 (Django 5.x 대응)
  • 🔐 Django signing.dumps() 완벽 이해하기
  • 📌 OAuth2 & 네이버 소셜 로그인 흐름 완전 정리
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (730) N
      • Python (32)
      • 프로젝트 (55) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41) N
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5) N
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (13) N
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    remittance
    oliveoilhealth
    galaxys25ultra
    smartphonedurability
    livebroadcast
    뷔
    basalcellcarcinoma
    urbantrends
    trumpmuskclash
    global politics
    homebartrend
    chansmannewspick
    life reflection
    youngprofessionals
    college reunions
    newpoliticalparty
    chinanightlife
    militarydischarge
    self-growth
    americaparty
    americanlaw
    titaniumcase
    hotcoffeecase
    travel ban
    lawsuitculture
    classaction
    japanricecrisis
    foodshortage
    bts
    RM
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📘 Django에서 as_view()가 필요한 이유 - FBV vs CBV 완전 정리
상단으로

티스토리툴바