본문 바로가기
개발/Django_python 웹 프레임워크

HttpRequest, HttpResponse, Render, HttpRedirect, JsonResponse

by 자유로운 코끼리 2020. 8. 5.
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.

댓글