
| 구분 | views.py(API) | views_html.py(HTML) |
|---|---|---|
| 응답 | JSON | HTML |
| 사용 기술 | DRF(Class-based APIView) | Django Template, Form |
| 목적 | 앱/프론트엔드/외부 연동 | 웹페이지 렌더링 |
| 주요 로직 | serializer, 필터, ordering | render, GET/POST form 처리 |
| 장점 | 엄격하고 깔끔한 API 설계 | 템플릿 변경 자유, UI 편함 |
| 위험성 | HTML과 섞이면 유지보수 지옥 | API와 섞이면 버그 유발 |
ListCreateAPIView, RetrieveUpdateDestroyAPIView 같은 DRF 전용 View를 사용하는 파일
filter_backends = [DjangoFilterBackend, OrderingFilter]filterset_class = TransactionFilterordering_fields = ['transacted_at', 'amount']화면 템플릿 + Form 처리 담당
return render(request, "transactions/transaction_list.html", {
"transactions": qs,
})form = TransactionForm(request.POST, user=request.user)serializer.save(user=self.request.user)category = request.GET.get("category")# API 조회
class TransactionListCreateView(ListCreateAPIView):
def get_queryset(self):
return Transaction.objects.filter(user=self.request.user)
# HTML 조회
def transaction_html_view(request):
qs = Transaction.objects.filter(user=request.user)
| 구분 | API | HTML |
|---|---|---|
| 최종 출력 | JSON | HTML 템플릿 |
| 사용 위치 | 모바일 앱 · React · Vue · 외부 서비스 | Django 템플릿 |
| response 형태 | Response(serializer.data) | render(request, template, context) |
| 확장 방향 | REST 구조 확장, POST/PUT/DELETE | UI, 템플릿 변경, 부트스트랩, 필터 UI |
| 인증 흐름 | JWT, 토큰 인증, API 권한 중심 | 로그인 기반, redirect, 메시지 |