Django REST Framework/DRF 일반

[DRF] Request, Response의 간단한 정리

bluebamus 2024. 1. 25.

 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/

 

Requests - Django REST framework

 

www.django-rest-framework.org

 

   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/

 

Responses - Django REST framework

response.py Unlike basic HttpResponse objects, TemplateResponse objects retain the details of the context that was provided by the view to compute the response. The final output of the response is not computed until it is needed, later in the response proc

www.django-rest-framework.org

 

 - reference : 

https://velog.io/@jcinsh/DRF-function-based-view

 

DRF 2 - Function-based view, Request, Response (News api 2편)

본 사례에서는 article 정보를 CRUD하는 함수형 뷰를 작성하려고 한다.엔드포인트는 인자로 article 객체에 대한 pk 정보가 필요한가, 필요하지 않은가로 판단해 2가지로 만들고자 한다. 이 때 pk 정보

velog.io

https://velog.io/@yvvyoon/django-rest-framework-1

 

Django REST Framework 뽀개기 1

글을 작성하지는 않았지만 Django REST Framework(DRF) 공식 문서의 튜토리얼을 따라서 간단한 ModelSerializer를 사용하여 API를 구축해보았다. 단순 JSON 데이터를 입력, 출력하는 것을 넘어 이번에는 DRF의

velog.io

 

댓글