[Django] request 매개변수

장고에서는 반드시 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