Response
기본 HTTPResponse개체와 달리 TemplateResponse 개체는 response을 계산하기 위해 View에서 제공한 컨텍스트의 세부 정보를 유지합니다. Response의 최종 출력은 필요할 때까지 계산되지 않으며 Response 프로세스 후반에 계산됩니다.
DRF는 클라이언트 요청에 따라 여러 content-type으로 렌더링될 수 있는 content를 반환할 수 있는 Response 클래스를 제공하여 HTTP 콘텐츠 협상을 지원합니다.
Response 클래스는 Django의 SimpleTemplateResponse를 Subclass화 합니다. Response 객체는 네이티브 파이썬 요소로 구성되어야 하는 데이터로 초기화 됩니다.
Response클래스를 사용할 필요는 없고, 필요한 경우 view에서 일반 HttpResponse 또는 StreamingHttpResponse objects로 반환할 수도 있습니다. Response 클래스를 사용하면 콘텐츠 협상 웹 API Response를 리턴할 수 있는 더 나은 인터페이스를 제공할 수 있으며, 이 인터페이스는 여러 형식으로 랜더링 될 수 있습니다.
만약 어떠한 이유로 DRF를 사용자 커스터마이징 하지 않는 한, Response 객체를 반환하는 View에서는 항상 APIView 클래스 또는 @api_view 함수를 사용해야 합니다. 이렇게 하면 View에서 리턴되기 전에 view가 콘텐츠 협상을 수행하고 Response에 적합한 렌더러를 선택할 수 있습니다.
Creating Responses
Response()
기본값:
Response(data, status=None, template_name=None, headers=None, content_type=None)
Arguments:
- data : Response에 대한 Serializer된 데이터 입니다.
- status : response에 대한 상태값 입니다. 기본값은 200입니다.
- template_name : html을 렌더해줄 템플릿 이름
- headers : Response에 사용할 HTTP 딕셔너리
- content_type : Response의 content-type, 이 설정은 콘텐츠 협상에 따라 렌더러가 자동으로 설정하지만 콘텐츠 유형을 명시적으로 지정해야할 때 사용합니다.
일반적인 HttpResponse object와 달리 렌더링된 content를 사용하여 response object를 인스턴스화 하지 않습니다. 대신 모든 Python 기본 요소로 구성된 렌더링되지 않은 데이터를 전달합니다.
Response 클래스에서 사용하는 렌더러는 Django 모델 인스턴스와 같은 복잡한 데이터 유형을 기본적으로 처리할 수 없으므로 response object를 생성하기 전에 데이터를 원시 데이터 유형으로 serialize(직렬화)해야 합니다.
DRF에서 Serializer 클래스를 사용하여 이 데이터 직렬화를 수행하거나 사용자 고유의 직렬화를 사용할 수 있습니다.
Attributes
.data
렌더링되지 않은 직렬화된 Response 데이터입니다.
.status_code
HTTP Response의 응답을 숫자로 나타냅니다.
.content
Response의 렌더링된 content입니다. .render()메서드가 .content에 접근하려면 먼저 호출되어야 합니다.
.template_name
template_name이 제공된 경우, HTML 렌더러 또는 일부 다른 사용자 지정 template렌더러가 response에 승인된 렌더러인 경우에만 필요합니다.
.accepted_renderer
response를 렌더링하는 데 사용할 렌더러 인스턴스입니다.
response가 view에서 반환되기 직전에 APIView 또는 @api_view에 의해 자동으로 설정됩니다.
.accepted_media_type
콘텐츠 협상 단계에서 선택한 미디어 타입입니다.
reponse가 view에서 반환되기 직전에 APIView 또는 @api_view에 의해 자동으로 설정됩니다.
.renderer_context
renderer의 .render() 메서드에 전달되는 추가 컨텍스트 정보의 딕셔너리이빈다.
reponse가 view에서 반환되기 직전에 APIView 또는 @api_view에 의해 자동으로 설정됩니다.
Standard HttpResponse attributes
response 클래스는 SimpleateResponse를 확장하며 모든 일반 특성 및 메서드를 response에서도 사용할 수 있습니다. 예를 들어, 다음과 같은 표준 방법으로 반응에 대한 헤더를 설정할 수 있습니다.
reseponse = Response()
response['Cache-Control'] = 'no-cahce'
.render()
다른 TemplateResponse와 마찬가지로 이 방법을 호출하여 response의 직렬화된 데이터를 최종 응답 컨텐츠로 렌더링 합니다. .ender()가 호출되면, response content는 accepted_renderer 인스턴스에서 .render(data, accepted_media_type, renderer_context) 메서드를 호출한 결과로 설정됩니다.
Django의 표준 response 주기에 따라 처리되므로 일반적으로 직접 .render()에 call할 필요가 없습니다.
참고 링크:https://www.django-rest-framework.org/api-guide/responses/#standard-httpresponse-attributes
'Django > Django REST framework' 카테고리의 다른 글
5. ViewSets (0) | 2021.06.26 |
---|---|
4-2 Generic Views (Mixin,Concrete) (0) | 2021.06.23 |
4-1. Generic Views (GenericAPIView) (2) | 2021.06.07 |
3. DRF-Views (0) | 2021.06.06 |
1. DRF-Requests (0) | 2021.05.30 |
댓글