(기타) request란? + view 안에서 view 불러오기

LouAn Lee·2022년 9월 16일
1

이번장은 request의 의미와 아주 간단하지만 알아두면 쓸모있는 기능에 대한 글이다. Request란 무엇이고 이를 활용해 django의 view안에서 view를 불러오기 위해서는 어떻게 해야 할까?

가장먼저 기억해야 할 부분은 Django는 web framework라는 것이다. 간단히 말하면 web client와 server사이에서 어떻게 작동(work)할지 정해놓거나(정할 수 있는 / frame) 구조와 프로세스이다.

먼저 django에서는 view의 함수를 불러올 때 request를 매개변수로 넘겨주는데, 이 때 request는 어떠한 역할을 하는 것일까를 짚어보자.

  • 가장 기본적으로 request 매개변수는 request에 대한 데이터를 포함하는 HttpRequest 객체이다.(참고) django가 이 request를 받으면 매칭되는 method(view)를 찾아서 이를 불러오면서 request를 보내준다. 말하자면, request 를 통해서 django가 어떤 view를 불러올지를 인식하고 불러올 수 있게 해준다.

아래 그림을 살펴보면 대략적인 흐름을 볼 수 있고, 각 요소별로 역할을 알 수 있다. 먼저 HTTP request(요청)을 받는게 시작점이다.

예를 들어, naver에 들어간다고 생각해보자.

  1. 사용자가 url 주소창에 www.naver.com을 치고 enter를 친다. 그러면 www.naver.com에 해당하는 ip주소로 가서 웹서버에게 '나 왔으니 내용을 내 놓으라' 라는 요청을 할 것이다. 이게 request이다.
    이 request를 받으면 django가 필요해진다.(naver는 예시이지 naver가 Django로 작성되었다는 의미는 아니다)

  2. 요청을 받으면 Django는 이 요청을 어디로 보내야하지? 라고 생각하고 URLS에서 판단하여 Views에게 적절한 요청을 보낸다.

  3. Views에는 함수들이 저장되어 있는데, 주로 화면과 Data를 요청하고 다시 받아서 결합하고 이를 client에게 응답하는 역할을 한다. 화면은 Template쪽으로, Data는 Model쪽으로 요청을 보낸다(Model은 대부분 Web Server(ex. MySQL)와 연결되어 있다.)

  4. 각각이 요청을 받은 쪽에서 응답을 받아 다시 views와 template을 통해 화면으로 버무리고 이를 다시 Http Response로 client에 응답한다.(이 과정에서 Django의 models에서 받은 데이터를 view를 통해 html로 보내고 이를 사용하는 간단한 html 문법이 있다. 이는 다음에 소개하겠다.)

  • 이를 통해 알 수 있는 것은 django로 웹사이트를 만들 때 필요한 순서, 역할, 요소들 이다. 예를 들어, 우리가 화면을 만들고자 하면, url에 등록을 하고 화면을 구현해줄 view, 데이터를 주고받을 model의 데이터 항목, 실제 화면을 어떻게 만들지를 설계한 html 등이 필요할 것이다.

  • 이제 request에 대해서 알았으니 이를 활용하여, request를 넘겨주며 view 안에서 view를 불러오는 것이 가능해진다.

  • 언제/어떻게 사용하나? 참고
    큰 뷰안의 작은 부분을 따로 rendering 하거나, 다른 기능을 할 함수를 따로 구현할 때 사용가능할 것이다. 예를 들어, 아래와 같이 두 개의 함수를 구현했다고 가정하자.

def view1(request):
    # do some stuff here
    return HttpResponse("some html here")

def view2(request):
    return view1(request) 

위와 같이 두 개의 view를 작성하였다면

def view1(request):
    # do some stuff here
    return HttpResponse("some html here")

def view2(request):
    response = view1(request)
    # do some stuff here
    return HttpResponse("some different html here")

위와 같은 방식으로 view2가 request를 받아서 view1에게 전달을 하고 view1의 HttpResponse를 return받아 저장해서 사용하는 방식이 있을 수 있다.

참고(request): https://docs.djangoproject.com/en/4.1/ref/request-response/
참고(view 안에서 view 불러오기): https://stackoverflow.com/questions/4808329/can-i-call-a-view-from-within-another-view

profile
데이터 사이언스

0개의 댓글