REST 기반의 웹 서비스를 다룬다면
request.POST
는 잊어야 한다.
DRF
의 Requst
는 HttpRequest
를 확장하여 request
파싱과 인증을 유연하게 만들었다.
: Request
클래스는 form
데이터를 다루던 방식과 비슷하게 그리고 유연하게 json data
또는 media types
를 다루게 한다.
request.data
는 request body
를 파싱한 데이터를 리턴한다.
non-file
, file
형태의 컨텐츠 모두를 다룬다.
HTTP method
에서 POST
뿐 아니라 PUT
, PATCH
, DELETE
등을 모두 지원한다.(django에서는 post
와 get
만 지원했다.)
form
데이터 뿐 아니라 JSON
형태의 데이터 또한 같은방법으로 핸들링 할 수 있다.
reqest.query_parmas
는 request.GET
과 동의어라고 생각하자.GET
요청에서 동반한 쿼리 파라미터를 다룰때는, standard django
가 제공하는 request.GET
보다는 request.query_params
를 사용하는 것을 더 권장한다. 코드의 명확성이 좋아질 것이다.GET
요청 뿐 아니라, POST
, DELETE
등 모든 HTTP method
에서 사용하는 것을 권장한다.(papago 번역 그대로)APIView class
또는 @API_view decorator
는 뷰의 parser_classes set
또는 DEFAULT_PARSER_CLASS
설정에 기반하여 이 속성이 Parser
인스턴스 목록으로 자동 설정되도록 보장한다.
보통 사용자가 해당 메소드에 접근할 일이 없다.
중요1: 만약 클라이언트가 잘못된 컨텐츠(역주: malformed라는데 아마 form에 맞지 않는 데이터정도로 생각하면 될 것 같다.)를 보내게 된다면.
request.data
에서ParseError
를 유발하고, 이는404 Bad Request
를 반환한다.중요2: 만약 클라이언트가
content-type
을 함께 보낸다면(보통 컨텐츠타입을 json, file 등등을 설정해서 보낼텐데 그렇다면 이건 빈칸으로 놔두고 요청을 보내도 알아서 컨텐츠 타입을 분석해서 변환해 주는것인가? 이 부분은 아직 잘 모르겠다.),UnsupportedMediaType
에러를 유발하고,415 Unsupported Media Type
을 반환한다.
: request
는 content negotiation
(자세한 내용 링크) 단계의 결과를 사용자가 선택하는 기능을 제공한다. 이는 개발자가 구현체의 스펙(원글: implement behaviour)을 정할 수 있도록 한다. 예를 들어, 미디어 타입에 따른 각각의 serialization schemes
를 선택하는 식의 구현이 가능하다.
renerer
인스턴스string
타입의 변수이다.: DRF
는 유연하고 각각의 request
에 대한 인증(authentication)기능을 제공한다.
request
를 통해 제공한다.자세한 사항은 인증 정책 문서 참고
request.user
는 인증정책(authentication policy)에 종속되어 있지만, django.contrib.auth.models.User
인스턴스를 반환한다. request
가 인증이 되지 않는다면, request.user
는 django.contrib.auth.models.AnonymousUser
인스턴스를 반환한다.request.auth
는 추가적인 인증관련 내용(authentication context)을 반환한다. 인증 정책에 종속되어 해당 인스턴스를 반환한다. 하지만 보통 인증된 요청의 토큰 인스턴스를 반환한다.request
거나 추가적인 인증 컨택스트가 없다면 request.auth
의 기본값은 None
이다.: 브라우저 기반의 PUT
, PATCH
, DELETE
forms
를 지원한다.
request.method
는 대문자 stirng으로 HTTP method
를 표현한다.PUT
, PATCH
, DELETE
forms
를 지원한다.(그렇다면 HTTP method
방식과 browser-based
방식이 다른건가?)request.content_type
은 request bpdy
의 media type
을 string
타입으로 표현한다. no media type
이라면 빈 스트링을 반환한다.request.META.get('HTTP_CONTENT_TYPE')
으로 호출하라. request.stream
은 request body
의 스트림을 가리킨다.
You won't typically need to directly access the request's content, as you'll normally rely on REST framework's default request parsing behavior. 즉 너가 쓸일 없어.
DRF
의 Request
클래스는 기본 장고의 HttpRequest
클래스를 확장한 것이다. 다른 모든 변수나 메소드 또한 사용 가능하다. 예를들어, request.META
나 request.session
등 기존의 기능을 여전히 사용할 수 있다.