DRF의 Requests 객체
https://www.django-rest-framework.org/api-guide/requests/
메소드 종류 | 설명 |
request.method | HTTP Request 메소드 종류 GET, POST, PUT, PATCH, DELETE 등 |
request.content_type | body에 들어갈 Media type |
request.data | body에 들어가는 데이터 전체 |
request.FILES | file 형식의 객체 |
request.FILES.getlist | 여러 개의 file 형식 객체들 (list 형태) |
request.query_params | URL Query Parameter 반환 (QueryDict 형태) |
request.query_params[<KEY>] | URL Query Parameter 의 특정 KEY 값 |
request.GET | GET 메소드로 전달된 URL Parameters (QueryDict 형태) |
request.GET[<KEY>] | GET 메소드로 전달된 URL Parameters 의 특정 KEY 값, 없으면 에러 |
request.GET.get(<KEY>, <기본값>) | GET 메소드로 전달된 URL Parameters 의 특정 KEY 값, 없으면 자동 기본값 |
request.POST | POST 메소드로 전달된 Body data (QueryDict 형태) |
request.POST[<KEY>] | POST 메소드로 전달된 Body data 의 특정 KEY 값, 없으면 에러 |
request.POST.get(, <기본값>) | GET 메소드로 전달된 Body data 의 특정 KEY 값, 없으면 자동 기본값 |
request.user | 요청하는 user |
request.auth | 요청하는 user의 인증 context |
DRF의 Requests - GET
# posts/request_test/id={}?a=1&b=2 채워서
def get(self, request, id):
# Request Base
print("request",request)
print("request.method: ", str(request.method))
print("request.content_type: ", request.content_type)
# Request Data
print("request.data: " , type(request.data), request.data)
# Request - GET
print("request.GET:", type(request.GET), request.GET) # QueryDict
print("request.GET[<KEY>]:", request.GET['ex']) # 값 없을시 에러 발생
print("request.GET.get(<KEY>, <default>):", request.GET.get('ex', None)) # 값없을시 None(기본값)
# QUERY PARAMS
print("request.query_params:", request.query_params) # QueryDict
print("request.query_params['ex']:", request.query_params['ex'])
return Response({'success': True}, status=status.HTTP_200_OK)
DRF의 Requests - POST
def post(self, request, id):
# Request Base
print("request",request)
print("request.method: ", str(request.method))
print("request.content_type: ", request.content_type)
# Request Data
print("request.data: " , type(request.data), request.data)
print("request.stream: " , type(request.stream), request.stream)
# Request User, Authentizaton
print("request.user: " , type(request.user), request.user) # 로그인 유저
print("request.auth: " , type(request.auth), request.auth)
# Request - Files
print("request.FILES: ", type(request.FILES), request.FILES) # Form-data에 존재하는 file형식의 객체
print("request.FILES.getlist: ", type(request.FILES.getlist), request.FILES.getlist('EX_FILES')) # getlist - 여러장의 이미지를 배열로 받음
# Request - POST
print("request.POST:", type(request.POST), request.POST) # Form-data에 존재하는 text형식의 객체
print("request.POST[<KEY>]:", request.POST['aa']) # 값 없을시 에러 발생
print("request.POST.get(<KEY>, <default>):", request.POST.get('aa', None)) # 값없을시 None(기본값)
# QUERY PARAMS
print("request.query_params:", request.query_params) # QueryDict
print("request.query_params['ex']:", request.query_params['ex'])
return Response({'success': True}, status=status.HTTP_200_OK)
API 예제
메소드 종류 | urls.py | URL (API Endpoint) | 파싱 방법 |
공통 | /test/<int:id> | /test/3 | def get(self, request, id) |
GET | /test | /test?a=10 body : {} |
request.query_params['a'] # 10 request.GET.get('a', None) |
POST | /test | /test body : {b:1, c:2} |
request.POST.get('b', None) |
POST | /test | /test?a=10 body : { b:2, c:3 } |
request.query_params['a'] # 10 request.POST.get('b', None) |
Query String vs Path varilable
Path variable : 어떤 자원(데이터)의 위치를 특정해서 보여줘야 할 경우
Query parameter : 정렬하거나 필터해서 보여줘야 할 경우 쓴다
'Python > Django' 카테고리의 다른 글
[Django] Pagination 방법 비교 (Feat. Django, DRF) (0) | 2022.11.10 |
---|---|
[Django] Django Pagination (by. Django Paginator) (0) | 2022.11.10 |
[Django] Query Profiling Tool (3) - Silk (0) | 2022.08.12 |
[Django] Query Profiling Tool (1) - Django debug toolbar (0) | 2022.08.12 |
[Django] Query Profiling Tool (2) - Custom Decorator & Logger (0) | 2022.08.12 |