개발/Django_python 웹 프레임워크

HttpRequest, HttpResponse, Render, HttpRedirect, JsonResponse

자유로운 코끼리 2020. 8. 5. 09:33
728x90

장고는 request와 response 객체로 data를 서버와 클라이언트가 주고 받습니다.

장고는 django.http 모듈에서 HttpRequest와 HttpResponse API를 제공합니다.

 

1. HttpRequest

클라이언트로 부터 들어오는 모든 요청을 담고 있습니다.

 

주요한 속성

HttpRequest.body  # request의 body 객체
HttpRequest.headers # request의 headers 객체
HttpRequest.COOKIES # 모든 쿠키를 담고 있는 딕셔너리 객체
HttpRequest.method # reqeust의 메소드 타입
HttpRequest.GET # GET 파라미터를 담고 있는 QueryDict 자료형 객체
HTTpRequest.POST # POST 파라미터를 담고 있는  QueryDict 자료형 객체
HTTpRequest.FILES #POST 인자 중 파일에 한해서 접근이 가능

QueryDict? 

python의 딕셔너리와 유사한 자료형으로, 딕셔너리는 Key 값이 중복 안되는데 비해 querydict 은 중복을 허용합니다.

 

request 

우리가 여태 사용했던 request가 바로 HttpRequest의 객체입니다.

if request.method == 'GET':

 

 

2. HttpResponse

HttpResponse(data, content_type)
HttpResponse("Hi")

전달된 컨텐츠를 포함한 HttpResponse객체를 만들어 내는,

response를 반환하는 가장 기본 적인 함수입니다.

 

하나의 함수는 최소 하나의 HttpResponse을 반환해야합니다.

이는 views 에서 검사하는게 아니라 middleware 에서 검사를 하게 됩니다.

# config/settings.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

middleware는 app을 감싸고 있으면서

request가 들어올 때 적절하게 가공해주고

response가 나갈 때도 확인을 해줍니다.

 

 

3. HttpRedirect

HttpResponseRedirect(url)

response를 하지는 않고, 지정된 url페이지로 redicrect 합니다.

def button(request):
    return redirect("https://www.google.com/")

4. Render

render(request(필수), template_name(필수), context=None, content_type=None, status=None, using=None)

render httpRespose 객체를 반환하는 함수입니다.

앱 내에 있는 templates을 context와 엮어 httpResponse로 반환해 주는 함수입니다.

context에서 key 값이 템플릿에서 사용할 변수이름, value값이 파이썬 변수- 보내주는 값을 말합니다.

def main(request):
    name = "eun"
    return render(request, 'main.html', {'name': name})

5. JsonResponse

JsonResponse(data, encoder=DjangoJSONEncoder,safe=True, json_dumps_params=None, **kwargs)

HttpResponse의 subclass로, json-encoded response를 생성할수 있게 해 줍니다.

response를 커스터마이징 하여 전달하고 싶을때, http status code에 더하여 메세지를 입력해서 전달할 수 있습니다.

 

- 대부분의 기능은 superclass(HttpResponse)에서 상속 받습니다.

- 첫번째 인자로는 전달할 데이터로서 반드시 dictionary 객체여야 합니다.

- Content-type 헤더의 default는 application/json.

- json_dumps_params는 json.dumps()에 전달할 딕셔너리의 keyword arguments.