Responses | REST Framework API Guide

jacoblee19·2021년 1월 21일
0

Django REST Framework

목록 보기
4/9
post-thumbnail

공식문서를 직접 번역하고 공부한 글입니다!

> Responses

기존 HttpResponse 체와는 다르게, TemplateResponse 객체는 응답을 계산하기 위한 뷰로부터 제공된 컨텍스트의 세부정보를 유지한다. Response의 최종 출력은 응답 과정에서 필요한 시점까지 계산되지 않는다.

REST Framework는 클라이언트의 요청에 따라 사용자가 다수의 컨텐츠 형식으로 렌더링 할 수 있는 컨텐츠를 리턴할 수 있는**Response 클래스를 제공함으로써 HTTP 컨텐츠 협상을 지원**한다.

Response 클래스는 Django의 SimpleTemplateResponse를 하위클래스로 가진다.
Response 객체는 순수 기본 파이썬으로 구성된 데이터로 초기화된다.
REST Framework는 어떻게 최종 응답 컨텐츠를 렌더링해야 할지 결정하기 위해 표준 HTTP 컨텐츠 협정을 사용한다.

사실 꼭 Response 클래스를 사용해야하는 것은 아니다.
사용자의 view에서 기존의 HttpResponse나 StreamingHttpResponse 객체가 필요하다면 사용해도 무관하다. 하지만 Response 클래스를 사용함으로써 컨텐츠 협상이된, 여러 포맷으로 렌더링 될 수 있는 WEB API Response을 위한 더 훌륭한 인터페이스를 제공한다.

만약 사용자가 어떤 이유로 REST Framework를 과하게 커스터마이즈하지 않는다면, 사용자는 항상 view가 Response객체를 리턴하도록 APIView 클래스나 @api_view 함수를 사용해야만 한다.
이렇게 함으로써, 객체가 view에서 리턴되기 전에, view는 컨텐츠 협정과 응답을 위한 적절한 renderer를 선택하는 작업을 수행할 수 있게 된다.

> Creating Responses

Responses()

Signature: Response(data, status=None, template_name=None, headers=None, content_type=None)

기존 HttpResponse객체와는 다르게, 사용자는 렌더링된 콘텐츠로 Response 객체를 인스턴스화 하지 못한다. 대신에 사용자는 렌더링 되지 않은 기존 파이썬으로 구성된 데이터를 전달할 수 있다.

Response 클래스로 사용된 renderer들은 장고 모델 인스턴스들 같은 복잡한 데이터타입들을 원초적으로 다룰 수 없다. 그래서 사용자는 데이터를 Response 객체가 생성되기 전에 기본형의 데이터 타입들로 직렬화 해야 할 필요가 있다.

사용자는 데이터 직렬화를 수행하기 위해 REST Framework의 Serializer 클래스를 사용하거나 자신의 커스텀 serialization을 사용할 수 있다.

인자 목록(arguments):

  • data: 응답을 위해 직렬화 된 데이터이다.
  • status: 응답을 위한 상태 코드이다. 200이 기본 값이다.
  • template_name: HTMLRender가 선택되었을 때 사용하는 템플릿 이름이다.
  • headers: 응답에 사용되는 HTTP headers의 딕셔너리이다.
  • content_type: 응답의 컨텐츠 타입이다. 전형적으로, 컨텐츠 타입은 컨텐츠 협정에 의해 결정된 렌더러로부터 자동적으로 세팅된다. 하지만 사용자가 명확하게 컨텐츠 타입을 구체화해야 하는 상황들도 있을 수 있다.

> Attributes

.data

렌더링 되지 않은 응답을 위한 직렬화 된 데이터이다.

.status_code

숫자로 구성된 HTTP 응답 코드이다.

.content

렌더링이 된 응답의 컨텐츠이다. .content가 사용되기 전에 반드시 .render() 메소드가 전에 호출되어야 한다.

.template_name

HTMLRender나 다른 커스텀 템플릿 렌더러가 응답을 위해 허용된 렌더러인 상황에서 사용되는 템플릿 이름이다.

.accepted_renderer

응답을 렌더링할 때 사용되는 렌더러 인스턴스이다.
응답이 view로부터 리턴되기 전에 APIView나 @api_view로 인해 자동적으로 세팅된다.

.accepted_media_type

컨텐츠 협상 단계에서 선택된 미디어 타입이다.
응답이 view로부터 리턴되기 전에 APIView나 @api_view로 인해 자동적으로 세팅된다.

.renderer_context

렌더러의 .render() 메소드로 전달 된 딕셔너리 형태의 추가 컨텍스트 정보이다.
응답이 view로부터 리턴되기 전에 APIView나 @api_view로 인해 자동적으로 세팅된다.

> Standard HttpResponse Attributes

Response 클래스는 SimpleTemplateResponse를 확장하고, 모든 기존 속성들과 메소드들도 응답에 사용 가능하다. 예를 들어, 사용자는 표준 방식으로 아래와 같이 응답의 headers를 세팅할 수 있다.

response = Response()
response['Cache-Control'] = 'no-cache'

.render()

Signature: .render()

다른 TemplateResponse와 동일하게, .render() 메소드는 응답으로부터 직렬화된 데이터를 렌더링 해서 최종 응답 컨텐츠에 사용하기 위해 호출된다. .render()가 호출될 때, 응답 컨텐츠는 accepted_renderer 인스턴스에서 .render(data, accepted_media_type, renderer_context)메소드가 호출된 결과로 설정 된다.

일반적으로 장고의 표준 응답 사이클에서 처리하기 때문에 사용자가 직접 .render()를 호출할 일은 없다.

profile
Back-end Developer 🙇‍♂️ 💻 🙆‍♂️

0개의 댓글