728x90
반응형
Django REST Framework의 api_view 데코레이터
개념
api_view는 Django REST Framework(DRF)에서 제공하는 데코레이터로, 뷰 함수를 RESTful API의 엔드포인트로 변환하는 역할을 한다.
일반적으로 Django의 기본 뷰 함수는 HttpRequest 객체를 사용하지만, api_view를 적용하면 DRF의 Request 객체를 사용할 수 있다. 이 객체는 JSON 데이터 파싱, 유효성 검증 등 추가적인 기능을 제공한다.
주요 기능
- 요청 메서드 제한
- 뷰 함수에서 허용할 HTTP 메서드(GET, POST, PUT, DELETE 등)를 지정할 수 있다.
- 허용되지 않은 메서드로 요청이 들어오면 405 Method Not Allowed 에러를 반환한다.
- Request 객체 제공
- Django의 HttpRequest 대신 DRF의 Request 객체를 사용하여 JSON 요청 데이터를 더 쉽게 다룰 수 있다.
- DRF의 Response 객체 반환
- 반환값을 DRF의 Response 객체로 처리하므로 JSON 응답을 생성하기 간편하다.
사용법
from rest_framework.decorators import api_view
from rest_framework.response import Response
# GET과 POST 메서드만 허용
@api_view(['GET', 'POST'])
def example_view(request):
if request.method == 'GET':
data = {"message": "This is a GET request"}
return Response(data)
elif request.method == 'POST':
data = {"message": "This is a POST request", "received_data": request.data}
return Response(data)
특징과 동작 과정
HTTP 메서드 제한
@api_view에 전달된 메서드 목록 외의 요청이 들어오면 자동으로 405 Method Not Allowed 상태 코드를 반환한다.
@api_view(['GET'])
def only_get_view(request):
return Response({"message": "Only GET requests are allowed"})
Request 객체와 데이터 파싱
Request 객체를 통해 JSON, XML, Form 데이터 등 다양한 요청 데이터를 자동으로 파싱하여 사용할 수 있다.
@api_view(['POST'])
def parse_request_data(request):
# JSON 데이터를 자동으로 파싱
name = request.data.get('name', 'Default Name')
return Response({"name_received": name})
Response 객체 사용
뷰 함수에서 Response 객체를 반환하면 DRF가 이를 JSON 포맷으로 직렬화하여 클라이언트에게 응답한다.
실제 예제
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['POST'])
def create_item(request):
# 요청 데이터 읽기
item_name = request.data.get('name')
if not item_name:
return Response({"error": "Item name is required"}, status=400)
# 성공적인 응답 반환
return Response({"message": f"Item '{item_name}' created successfully!"}, status=201)
- 요청 예시:
POST 요청 시, JSON 데이터를 전송:json{ "name": "Laptop" } - 응답 예시:
json{ "message": "Item 'Laptop' created successfully!" }
장점
- 코드가 간결하고 가독성이 높다.
- HTTP 메서드 제한과 데이터 파싱을 쉽게 처리할 수 있다.
- DRF의 Request와 Response 객체를 활용해 RESTful API를 효율적으로 구현 가능하다.
주의사항
- api_view는 함수형 뷰에만 사용 가능하며, 클래스 기반 뷰에서는 사용할 수 없다. 클래스 기반 뷰에서는 APIView를 사용한다.
결론
api_view는 Django REST Framework에서 간단한 API 엔드포인트를 만들 때 매우 유용한 도구다. RESTful API 구현을 단순화하고, 요청 메서드 제한 및 데이터 파싱 기능을 기본적으로 제공하여 개발자의 생산성을 높여준다.
728x90
반응형
'코딩' 카테고리의 다른 글
| Codeium (3) | 2024.12.12 |
|---|---|
| django REST Framework Mixin 패턴 (1) | 2024.12.12 |
| 파이썬 자료형; Data Types (1) | 2024.12.05 |
| 파이썬 출력 예쁘게 하기; python Format (2) | 2024.12.05 |
| django ORM (SQL 코드 자동화) (2) | 2024.12.04 |
