장고 공식 문서를 따라가다 보면, 가장 처음 만나는 생소한 항목이 바로 HttpResponse
이다. 이것을 왜 사용하는지 알아보자.
장고는 request
와 response
객체로 상태를 서버와 클라이언트가 주고 받는데, 아래와 같은 절차를 거친다.
HttpRequset
객체를 생성한다.urls.py
에서 정의한 특정 View 클래스/함수에 첫 번째 인자로 해당 HttpRequest
객체를 전달.HttpResponse
나 JsonResponse
객체에 담아 전달.이를 위해서 장고는 django.http
모듈에서 HttpRequest
와 HttpResponse
API 를 제공하는 것이다.
공식 문서를 따라가다 보면, 단축 기능이라면서 Render
를 소개해 주는데, 이게 뭔지 자세히 살펴보자.
Render
는 HttpResponse
객체를 반환하는 함수로, template
을 context
와 엮어서 HttpResponse
객체로 쉽게 반환해 주는 함수라고 한다.
이 함수의 기본형은
render(request(필수), template_name(필수),
context=None, content_type=None,
status=None, using=None)
이렇게 되어 있다.
loader.get_template()
함수 안에 들어간 인자를 적으면 되는 것 같다.key
값이 템플릿에서 사용할 변수 이름, value
값이 파이썬 변수가 된다.공식 문서에서 작성한 전체 코드를 보면서 비교해보자.
from django.http import HttpResponse
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
template = loader.get_template('polls/index.html')
context = {
'latest_question_list': latest_question_list,
}
return HttpResponse(template.render(context, request))
# 단축 기능 render.
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {'latest_question_list' : latest_question_list}
return render(request, 'polls/index.html',context)
위에가 템플릿, 아래가 렌더를 사용한 코드인데, 비교해보니까 어느 요소가 어디에 들어갔는지가 눈에 확 띄는 것 같다. 확실히 코드 길이를 줄여주는 듯.