Django/restframework

DRF docs API Guide Responses

두잇 두두 2024. 1. 12. 00:57
728x90

Responses

기본 HttpResponse와 달리 TemplateResponse 개체는 뷰에서 제공한 context를 계산합니다.
마지막 출력 까지 response는 필요하지 않다면 계산되지 않습니다
- Django documentation -

REST framework는 클라이언트 요청에 따라 여러 콘텐츠 유형으로 랜더링 할 수 있게 HTTP content를 지원합니다. 그래서 다양한 content types로 랜더링 가능합니다.
Response class는 Django의 SimpleTemplateResponse 의 subclass 입니다. Response objects는 native Python primitives로 데이터로 초기화 합니다. 그런 다음 REST framework는 표준 HTTP content를 사용해서 최종 응답 contnet를 render할 방법을 결정합니다.
Response 클래스를 꼭 사용할 필요는 없으며, 필요한 경우 일반적인 HttpResponseStreamingHttpResponse objects를 view에 사용 가능합니다. Response class를 사용한다면 다양한 foramts로 render 할 수 있고 좋은 interface를 제공 할 수 있습니다.

어떤 이유로 REST framework를 어렵게 customize 하지 않는 다면 Response objects를 반환하는 APIView class나 @api_view function을 뷰에 사용하기를 권장 합니다. 이렇게 한다면 뷰가 반환되기 전에 response에 적합한 내용을 반환할 것을 보장합니다.


Creating responses

Response()

Signature: Response(data, status=None, template_name=None, headers=None, content_type=None)
일반적인 HttpResponse 객체와 달리 랜더링된 내용으로 Response객체를 인스턴스화 하지 않습니다.대신에 임의의 초기 Python으로 구성될 수 있는 랜더링 되지 않은 데이터를 전달합니다.

Response클래스에 사용된 이 랜더링은 Django model instance와 같이 복잡한 데이터 타입을 기본적으로 처리 할 수 없습니다. 그래서 Response를 만들기 전에 기본 데이터 형식으로 serialize 해야합니다.

REST framework의 Serializerclasses를 상용해서 직렬화 하거나 사용자 정의 직렬화를 진행 할 수 있습니다.


Arguments:

  • data: response에 대해 직렬화된 데이터
  • status: response의 status code. default는 200 입니다.
  • template_name: HTMLRenderer을 선택했을 시 template name에 사용됩니다.
  • headers: response에 사용할 HTTP 헤더 dict
  • content_type: response의 응답 유형입니다. 일반적으로 renderer에 의해 자동으로 생성되지만 내용 유형을 명시적으로 지정해야 하는 경우 사용 할 수 있습니다.
  •  

Attributes

.data

response에 랜더링 되지 않은 일련화된 데이터

.status_code

HTTP 응답의 숫자 상태 코드

.content

response의 render된 내용입니다. render() 메서드가 호출되어야 .content에 엑세스 가능합니다.

.template_name

template_name이 제공된 경우. HTML Renderer 또는 다른 사용자 지정 템플릿 rendere가 허용했을 경우만 필요합니다.

.accepted_render

response를 render하기 위해 사용할 renderer instance 입니다
APIView@api_view이 자동적으로 view에서 response 직전에 설정합니다.

.renderer_context

.render() method로 renderer에 추가적인 context information이 담긴 dict입니다
accepted_render와 똑같이 view에서 reponse 직전에 자동으로 설정합니다.


Standard HttpResponse attributes

Response class는 SimpleTemplateResponse을 확장하며, response에 모든 일반적인 특성과 메서드를 사용할 수 있습니다. 예를 들어 다음과 같은 표준 방법으로 response에 headers를 설정 할 수 있습니다.

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

.render()

Signature: .render()
다른 TemplateResponse과 마찬가지로 이 method는 response의 serialized 된 data를 최종 response content로 render하기 위해 호출됩니다. .render()이 호출되었을 때, response content는 accepted_rendererinstance 인스턴스에서 .render(data, accepted_media_type, renderer_context method를 호출한 결과로 설정됩니다.
일반적으로 Django's standard response cycle에 의해 처리되기 때문에 직접 .render()을 호출 할 필요는 없습니다.