ViewSet의 request 객체 파헤치기

개발을 파헤치다/Django|2018. 5. 11. 01:30

ViewSet의 각 메서드에는 모두 Request라는 객체가 인자값으로 포함되어 있습니다.

이것은 사용자가 보낸 요청에 관한 모든 정보를 포함하고 있는 객체입니다.

기본적으로 Request 객체는 Mutable 속성이 False로 설정되어 있습니다.

이것이 의미하는 바는 Request의 값들은 수정이 불가능하다는 것입니다.

먼저 ViewSet으로 전달된 Request 객체에 어떤 값들이 포함되어 있는지 살펴봅니다.


위의 수 많은 요소들 중 자주 사용하게될 속성들을 살펴보면 다음과 같습니다.

  • FILES → HTTP Multi-part Form으로 전송된 파일이 리스트 형태로 들어있습니다.
  • POST → HTTP POST 필드값이 Query Dict 형태로 들어있습니다.
  • user → 요청을 보낸 주체의 Model Instance입니다.
  • data → HTTP Multi-part Form으로 전송된 POST 필드값 및 File 리스트가 들어있습니다.




POST 필드값을 펼처서 확인하면 mutable 속성을 확인할 수 있습니다.

이 속성값이 False로 되어있기 때문에 아래와 같은 명령문은 소용이 없습니다.

self.request.POST.dict().update({"new":"value"})


따라서 Request의 data든 POST값이든 이를 활용하기 위해서는 copy() 메서드를 활용해야 합니다.

self.request.POST.dict().copy()

위의 명령문을 수행하면 Request 객체의 POST 속성값을 그대로 복사합니다.

이렇게하면 mutable 속성값이 True로 바뀌게 됩니다.

즉, Request 객체는 사용자의 요청 사항이 모두 포함된 중요한 객체이므로 Django REST Framework에서 기본적으로 수정을 차잔해 놓은것이라 생각이 듭니다.

따라서 요청에 포함된 값을 사용하기 위해서는 원하는 값을 복사해서 사용해야 합니다.

댓글()