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 클래스를 꼭 사용할 필요는 없으며, 필요한 경우 일반적인 HttpResponse 나 StreamingHttpResponse 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()을 호출 할 필요는 없습니다.
'Django > restframework' 카테고리의 다른 글
Generic views (0) | 2024.01.18 |
---|---|
DRF docs API Guide Class-based Views (1) | 2024.01.15 |
DRF docs API Guide Request (0) | 2024.01.09 |
DRF tutorial - 3 Class-based Views (0) | 2024.01.02 |
DRF tutorial -2 requests and responses (0) | 2024.01.02 |