이 내용은 장고 Request and response objects 공식문서를 요약/정리한 내용입니다.
장고는 request와 response 객체로 상태를 서버와 클라이언트가 주고 받습니다. 이를 위해 장고는 django.http 모듈에서 HttpRequest와 HttpResponse API를 제공합니다.
서버-클라이언트 통신 시 아래와 같은 절차로 데이터가 오고 갑니다.
1) 특정 페이지가 요청(리퀘스트)되면, 장고는 요청 시 메타데이터를 포함하는 HttpRequest 객체를 생성
2) 장고는 urls.py에서 정의한 특정 View 클래스/함수에 첫 번째 인자로 해당 객체(request)를 전달
3) 해당 View는 결과값을 HttpResponse 혹은 JsonResponse 객체에 담아 전달
HttpRequest.body # request의 body 객체
HttpRequest.headers # request의 headers 객체
HttpRequest.COOKIES # 모든 쿠키를 담고 있는 딕셔너리 객체
HttpRequest.method # reqeust의 메소드 타입
HttpRequest.GET # GET 파라미터를 담고 있는 딕셔너리 같은 객체
HTTpRequest.POST # POST 파라미터를 담고 있는 딕셔너리 같은 객체
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6', ...}
>>> 'User-Agent' in request.headers
True
>>> 'user-agent' in request.headers
True
>>> request.headers['User-Agent']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers['user-agent']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers.get('User-Agent')
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers.get('user-agent')
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
HttpRequest.read
HttpRequest.get_host()
HttpRequest.get_port()
HttpResponse(data, content_type)
# string 전달하기
HttpResponse("Here's the text of the Web page.")
# html 태그 전달하기
response = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
HttpResponseRedirect(url)
render(request(필수), template_name(필수),
context=None, content_type=None,
status=None, using=None)
render
는 httpRespose
객체를 반환하는 함수로 template을 context와 엮어 httpResponse
로 쉽게 반환해 주는 함수임# views.py
from django.shortcuts import render
def my_view(request):
name = "joey"
return render(request, 'app/index.html', {
'name': name,
}
JsonResponse(data, encoder=DjangoJSONEncoder,
safe=True, json_dumps_params=None,
**kwargs)
HttpResponse
의 subclass로, JSON-encoded response를 생성할수 있게 해 줌. 대부분의 기능은 superclass에서 상속받음Content-type
헤더는 application/json
임json_dumps_params
는 json.dumps()
에 전달할 딕셔너리의 keyword arguments임# Serializing non-dictionary objects
response = JsonResponse([1, 2, 3], safe=False)
JsonResponse는 response를 커스터마이징 하여 전달하고 싶을때, http status code에 더하여 메세지를 입력해서 전달할 수 있다.
이 메세지는 프론트엔드 개발자와 협의하여 약속된 메시지를 던진다. 만약 딱히 전달할 메시지가 없고, status code만 전달한다면 HttpResponse를 사용하면 된다.
메세지를 입력할 때는 보안 이슈가 있기 때문에 너무 자세히 적지 않는 것이 좋다.
감사합니다.
잘 보고 가요.