[DRF] Request, Response의 간단한 정리
1. Request, Response 공식문서 주요 내용 정리
1) Request
1. 속성 (Attributes)
- data: 요청의 본문 데이터를 나타내는 속성이다. request.data로 접근할 수 있다.
- POST: 요청의 POST 데이터를 나타내는 속성이다. HTML 폼 데이터를 처리할 때 사용된다. request.POST로 접근할 수 있으며, QueryDict 객체로 표현된다.
- GET: 요청의 GET 데이터를 나타내는 속성이다. URL의 쿼리 매개변수를 처리할 때 사용된다. request.GET으로 접근할 수 있으며, 역시 QueryDict 객체로 표현된다.
- QUERY_PARAMS: 요청의 쿼리 매개변수를 나타내는 속성이다. DRF 3.0 이전 버전에서 사용되었으며, 현재는 request.query_params로 대체되었습다. request.query_params 역시 QueryDict 객체로 표현된다.
- FILES: 요청의 파일 업로드 데이터를 나타내는 속성이다. 파일 업로드 요청을 처리할 때 사용된다. request.FILES로 접근할 수 있으며, MultiValueDict 객체로 표현된다.
- META: 요청의 메타데이터를 나타내는 속성이다. 요청의 헤더 정보, 인증 정보, 클라이언트 IP 주소 등을 포함한다. - request.META로 접근할 수 있으며, 파이썬의 사전(Dict) 형태로 표현된다.
- path: 요청의 경로(path)를 나타내는 속성이다. request.path로 접근할 수 있다.
- method: 요청의 HTTP 메소드를 나타내는 속성이다. request.method로 접근할 수 있다.
- content_type: 요청의 콘텐츠 타입을 나타내는 속성이다. request.content_type으로 접근할 수 있다.
2. 함수 (Methods)
- get_full_path(): 요청의 전체 경로를 반환하는 함수이다. 쿼리 매개변수를 포함한 전체 경로를 얻을 수 있다.
- is_ajax(): 요청이 Ajax 요청인지 여부를 판단하는 함수이다. Ajax 요청일 경우 True를 반환하고, 그렇지 않을 경우 False를 반환한다.
3. request.POST와 request.data의 차이점
- request.POST # 폼 데이터만 처리할 수 있고, POST 메소드에서만 동작한다.
- request.data # 임의의 데이터를 처리할 수 있고, POST, PUT, PATCH 메소드에서 동작한다.
- 공식 사이트 문서 : https://www.django-rest-framework.org/api-guide/requests/
1) Request
1. 정의
- API 응답을 생성하고 반환하는 데 사용된다. Pure Django에서는 전달할 데이터에 따라 HttpResponse, JsonResponse를 개발자가 직접 지정을 해 주어야 하지만, DRF의 Response를 이용하면 알아서 렌더링을 해 준다.
2. 생성자 (Constructor)
- Response(data=None, status=None, template_name=None, headers=None, content_type=None): Response 객체를 생성한다. data는 응답 데이터를 나타내며, status는 HTTP 응답 상태 코드를 나타낸다. template_name은 응답을 렌더링하는 데 사용되는 템플릿 이름이다. headers는 응답에 추가적인 헤더를 포함하는 사전(Dict)이다. content_type은 응답의 콘텐츠 타입을 나타낸다.
response = Response(data=data, status=status.HTTP_200_OK)
3. data 속성:
- response.data: 응답 데이터를 나타내는 속성이다. 이 속성은 JSON 형식으로 직렬화된 데이터를 포함한다.
# 응답 데이터 확인
print(response.data)
4. status_code 속성:
- response.status_code: 응답의 HTTP 상태 코드를 나타내는 속성이다.
# 응답 상태 코드 확인
print(response.status_code)
5. render() 메소드:
- response.render(): HttpResponse: 응답을 렌더링하여 HttpResponse 객체를 반환한다. 이 메소드는 응답 데이터를 콘텐츠 형식에 맞게 직렬화하고, 템플릿을 렌더링할 수 있도록 한다.
# 응답을 렌더링하여 HttpResponse 객체 반환
http_response = response.render()
print(http_response)
6. content 속성:
- response.content: 응답의 콘텐츠를 나타내는 속성이다. 직렬화된 데이터를 바이트(byte) 형태로 포함한다.
# 응답의 콘텐츠 확인
print(response.content)
7. headers 속성:
- response.headers: 응답에 포함된 헤더를 나타내는 속성이다. 이 속성은 사전(Dict) 형태로 헤더를 포함하며, 추가적인 헤더를 설정할 수 있다.
8. set_cookie() 메소드:
- response.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None): 응답에 쿠키를 설정하는 메소드이다. key와 value는 쿠키의 이름과 값이다. max_age는 쿠키의 최대 유효 기간을 설정하고, expires는 쿠키의 만료 일자를 설정한다. path, domain, secure, httponly, samesite 등의 매개변수를 사용하여 쿠키의 세부 설정을 지정할 수 있다.
9. set_header() 메소드:
- response.set_header(header, value): 응답에 헤더를 설정하는 메소드이다. header는 헤더의 이름을 나타내고, value는 헤더의 값이다.
# 응답에 헤더 설정
response.set_header('X-Custom-Header', 'Custom Value')
- 공식 사이트 문서 : https://www.django-rest-framework.org/api-guide/responses/
- reference :
https://velog.io/@jcinsh/DRF-function-based-view
https://velog.io/@yvvyoon/django-rest-framework-1
'Django REST Framework > DRF 일반' 카테고리의 다른 글
[DRF] PostgreSQL에서 order_by로 한글 정렬 하기 (1) | 2024.01.26 |
---|---|
[DRF] FBV, APIView의 예시 (1) | 2024.01.25 |
[DRF] TestCase로 Django-Rest-Framework를 위한 테스트 코드 만들기 (0) | 2024.01.23 |
[DRF] 공식 문서 - Caching 정리 (1) | 2024.01.22 |
[DRF] 공식 문서 - Content negotiation 정리 (0) | 2024.01.22 |
댓글