Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Wil
- 코딩테스트
- 아티클 스터디
- JWT
- web
- 개발공부
- 오블완
- django
- Python
- NoSQL
- 쿠키(cookie)
- 티스토리챌린지
- 세션(Session)
- ERD
- redis
- 자료구조
- flask
- 연습
- docker
- 장고
- CS
- viewsets
- 도커
- 파이썬
- git
- github
- Doker
- Til
- nginx
- SQL
Archives
- Today
- Total
SteadyDrills
[DJANGO] FBV와 CBV의 차이 본문
2401120
FBV (Function-Based View)
FBV는 뷰를 함수로 정의하여 요청을 처리하는 방식이다. 간단하고 직관적인 방법으로, 소규모 애플리케이션에 적합하다.
장점
- 단순성: 간단한 로직을 구현할 때 직관적이며 이해하기 쉽다.
- 명시성: 요청 처리 과정이 단계별로 명확하다.
- 빠른 프로토타이핑: 빠르게 뷰를 작성할 수 있어 초기 개발에 유리하다.
단점
- 재사용성 부족: 복잡한 로직이 필요한 경우 코드 중복이 발생할 수 있다.
- 확장성 제한: 기능이 증가할수록 관리가 어려워질 수 있다.
코드 예시
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .models import Post
from .serializers import PostSerializer
@api_view(['GET', 'POST'])
def post_list(request):
if request.method == 'GET':
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = PostSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
CBV (Class-Based View)
CBV는 뷰를 클래스로 정의하여 객체 지향적인 방식으로 요청을 처리하는 방식이다. 장고의 강력한 기능을 활용할 수 있다.
CBV는 장고의 발전과 함께 등장하여 객체 지향 프로그래밍의 장점을 활용하기 위해 개발되었다. 그렇기 때문에 복잡한 애플리케이션의 필요에 따라 재사용성과 확장성을 제공하기 위한 설계가 되어있다.
장점
- 재사용성: 공통 기능을 부모 클래스에 정의하고 상속받아 사용할 수 있어 코드 재사용이 편리하다.
- 확장성: 복잡한 애플리케이션에서 기능을 추가하거나 수정하기가 쉽다.
- 구조적 접근: 뷰 로직을 메서드로 분리하여 가독성과 관리가 편리하다 .
단점
- 복잡성: 초기 설정이 FBV보다 복잡할 수 있으며, 클래스 구조에 익숙하지 않은 개발자에게는 어려울 수 있다.
- 추상화의 오해: 클래스 기반 접근 방식은 때때로 과도하게 추상화되어 이해하기 어려울 수 있다.
코드 예시
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Post
from .serializers import PostSerializer
class PostListView(APIView):
def get(self, request):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data)
def post(self, request):
serializer = PostSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
'웹개발' 카테고리의 다른 글
세션스토어로 사용하는 Redis의 장단점 (0) | 2024.12.04 |
---|---|
CSRF(Cross-Site Request Forgery) 토큰이란? (0) | 2024.11.22 |
RESTful 아키텍처 (0) | 2024.11.17 |
SQLite란? (4) | 2024.11.13 |
Redis란? (1) | 2024.11.08 |