📌 Django 클래스 기반 뷰(CBV)의 흐름 완전 이해 + AJAX 연동 설명

2025. 5. 16. 13:12·기술블로그-Django편

📌 Django 팔로우 뷰의 흐름 완전 이해 + AJAX 연동 설명


✅ 개요

팔로우 기능을 구현할 때, Django에서 클래스 기반 뷰(CBV)를 활용해 사용자 간 팔로우 처리를 합니다. 이때 URL 파라미터, 요청 유저 정보, 모델 조회, 예외 처리까지 전반적인 흐름을 이해하는 것이 중요합니다. 또한, 이 뷰는 자바스크립트의 AJAX 요청으로 호출되는 경우가 많아 연동 방법까지 함께 알아봅니다.


🧱 핵심 코드 구조

class UserFollowingView(LoginRequiredMixin, View):
    def post(self, *args, **kwargs):
        pk = kwargs.get('pk', 0)
        to_user = get_object_or_404(User, pk=pk)

        if to_user == self.request.user:
            raise Http404

        # 팔로우 로직 예시 (추가 가능)
        UserFollowing.objects.get_or_create(
            from_user=self.request.user,
            to_user=to_user
        )
        return JsonResponse({'status': 'ok'})

🔍 한 줄씩 흐름 상세 분석

1️⃣ class UserFollowingView(LoginRequiredMixin, View)

  • 로그인한 유저만 접근 가능 (LoginRequiredMixin)
  • POST 방식 요청을 처리하는 CBV

2️⃣ def post(self, *args, **kwargs)

  • 브라우저 또는 AJAX에서 들어온 POST 요청 처리 메서드
  • URL의 파라미터가 kwargs로 전달됨

3️⃣ pk = kwargs.get('pk', 0)

  • URL에서 전달된 <int:pk> 값을 받아 유저 ID로 사용
  • 예: /user/5/follow/ → pk = 5

4️⃣ to_user = get_object_or_404(User, pk=pk)

  • pk에 해당하는 유저가 존재하지 않으면 404 에러 발생
  • 존재한다면 to_user 변수에 저장 (팔로우 대상)

5️⃣ if to_user == self.request.user:

  • 자신을 팔로우하려는 경우를 막음
  • self.request.user: 현재 로그인된 유저

6️⃣ raise Http404

  • 자기 자신을 팔로우하는 요청은 무시 (예외 처리)

7️⃣ UserFollowing.objects.get_or_create(...)

  • 이미 팔로우한 적이 있다면 아무 일도 하지 않음
  • 없다면 새로운 팔로우 관계 생성

8️⃣ return JsonResponse({'status': 'ok'})

  • 응답을 JSON 형태로 반환 (AJAX 요청 처리에 적합)

⚙️ AJAX란?

항목 설명

정의 JavaScript로 서버에 비동기 요청을 보내는 방식 (Asynchronous JavaScript and XML)
목적 페이지를 새로고침하지 않고 서버와 데이터를 주고받기 위함
사용 도구 fetch(), axios, XMLHttpRequest, jQuery.ajax() 등

✅ AJAX 예시 코드 (fetch 버전)

fetch('/user/5/follow/', {
  method: 'POST',
  headers: {
    'X-CSRFToken': csrftoken,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({})
})
.then(response => response.json())
.then(data => {
  if (data.status === 'ok') {
    alert('팔로우 성공!');
  }
});

📌 주의사항:

  • CSRF 토큰을 반드시 포함해야 Django가 요청을 허용합니다
  • 응답은 JSON 형식으로 받는 것이 일반적

🧠 요약

개념 설명

kwargs.get('pk') URL에서 전달된 유저 pk 추출
get_object_or_404() 존재하는 유저인지 확인하고 없으면 404 처리
self.request.user 로그인된 현재 사용자 정보
예외 처리 자기 자신을 팔로우하지 못하도록 404 발생
팔로우 로직 UserFollowing.objects.get_or_create()로 중복 방지
AJAX 연동 JSON 응답을 받아 프론트에서 처리 가능

필요 시 언팔로우 처리, 프론트 연동 템플릿, 버튼 상태 변경까지 확장 가능합니다 ✨

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

✅ Django QuerySet의 논리 평가와 get_context_data 코드 완전 이해하기  (0) 2025.05.16
📌 Django ORM - get_or_create 완전 정복  (0) 2025.05.16
📌 Django에서의 팔로우 기능 모델링 완전 정복  (0) 2025.05.16
🧠 Django에서 name=name 의미 완전 정리하기  (0) 2025.05.15
🔍 Django의 object vs objects 완전 정리!  (0) 2025.05.15
'기술블로그-Django편' 카테고리의 다른 글
  • ✅ Django QuerySet의 논리 평가와 get_context_data 코드 완전 이해하기
  • 📌 Django ORM - get_or_create 완전 정복
  • 📌 Django에서의 팔로우 기능 모델링 완전 정복
  • 🧠 Django에서 name=name 의미 완전 정리하기
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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 Django 클래스 기반 뷰(CBV)의 흐름 완전 이해 + AJAX 연동 설명
상단으로

티스토리툴바