장고에서는 반드시 request를 매개변수로 받아온다. request는 많은 정보를 담고 있다. 우선 그냥 request를 출력해보자.
# 데코레이터, csrf 토큰 검증 비활성화
@csrf_exempt
def ss(request):
print(request)
return HttpResponse("good")
아래와 같은 출력 결과를 얻을 수 있다.
WSGIRequest라는 객체가 존재하고, POST방식이고, url경로 정보가 나온다.
<WSGIRequest: POST '/ss/'>
이번엔 GET 방식으로 요청해 보았다. 아래와 같이 쿼리까지 모두 나온다.
<WSGIRequest: GET '/ss/?test=2'>
Django가 http request를 받으면, 해당 정보들을 가지고 WSGIRequest 객체를 생성한다. 이를 view의 첫 번째 매개변수로 전달한다. 그렇기 때문에 꼭 request라고 하지 않아도 상관없지만 이렇게 쓰는 것이 암묵적인 규칙이다. 이 클래스의 위치는 django.core.handlers.wsgi.WSGIRequest에 존재한다.
그럼 이제 request가 갖고 있는 다양한 속성들을 알아보자.
request.path - 경로 출력
# http://127.0.0.1:8000/ss/?test=2
request.path
# /ss/
request.method - http request 방식 출력
# http://127.0.0.1:8000/ss/?test=2
request.method
# GET
request.GET - django.http.request.QueryDict 객체. ?뒤에 쿼리로 들어온 값들을 사전 형태로 저장하여 보여준다.
# http://127.0.0.1:8000/ss/?test=2
request.GET
# <QueryDict: {'test': ['2']}>
request.POST - django.http.request.QueryDict 객체. body에 들어온 값들을 사전 형태로 저장하여 보여준다. 이때 파일의 경우 따로 받는 방법이 존재한다. postman을 이용하였다.
# http://127.0.0.1:8000/ss/
request.POST
# <QueryDict: {'search': ['의정부']}>
request.FILES - django.utils.datastructures.MultiValueDict 객체. 모든 업로드된 파일들을 저장한다. postman을 이용하여 데이터를 넣어주었다.
# http://127.0.0.1:8000/ss/
request.POST
# <MultiValueDict: {'qwer': [<InMemoryUploadedFile: 통합 문서1.csv (text/csv)>]}>
request.META - CONTENT_LENGTH, CONTENT_TYPE, HTTP_ACCEPT, HTTP_ACCEPT_LANGUAGE, HTTP_HOST, HTTP_REFERER, QUERY_STRING, REMOTE_HOST, REQUEST_METHOD, SERVER_NAME, SERVER_PORT, REMOTE_ADDR 등 클라이언트에게서 받은 모든 header 정보를 파이썬 사전 형태로 갖고 있다.
request.META
request.META['CONTENT_LENGTH']
참고
https://blog.birost.com/a?ID=00800-d1df59c6-e5b2-4c32-ad21-8196bab572ab
'장고(DJango)' 카테고리의 다른 글
[Django, DRF] 장고 쿼리 필터 (query filter) (0) | 2022.09.12 |
---|---|
[DRF] 테스트 케이스 (test case) (0) | 2022.08.15 |
[Django] render 함수 (render function) (0) | 2022.08.14 |
[Django] ORM & migration (0) | 2022.08.14 |
[DRF] serializer (django-restframework 시리얼라이저) (0) | 2022.08.13 |