장고 개념정리-dispatch()의 역할

less than 1 minute read

궁금하게 된 계기

웹 개발을 하던 도중 로그인을 한 유저가 기본 페이지에 접근을 하지 못하게 만드는 작업을 해야했다. 엄청나게 머리를 싸매며 고민하고, 검색한 끝에 역시 아니나 다를까 stackoverflow에서 그 답을 찾았다(앞으로는 검색법을 더 연구해야겠다 이렇게 쉽게 나오다니…).

방법은 dispatch 메소드를 이용해 인증된 사용자를 리다이렉트 시켜주는 것이었다. 코드는 아래와 같다.

def dispatch(self, request, *args, **kwargs):
        if request.user.is_authenticated:
            return redirect('blank_list')
        return super(MytemplatePage, self).dispatch(request, *args, **kwargs)

그런데 일단 방법은 찾아서 잘 적용했는데 이 dispatch() 메서드가 하는 역할을 정확히 알 수가 없었다. 장고 도큐먼트를 봐도 잘 이해가 안가고 뭔가 그냥 수박 겉핥기 하는 느낌이었달까. 그래서 이 메서드에 대해 더 자세히 찾아보게 되었다.

dispatch()의 역할

dispatch()의 역할을 요약하면 request와 response 사이의 중개자 역할이라고 할 수 있다. 간단히 말하면 HTTP 메서드에 기반한 request를 해석하는(GET인지 POST인지) 일을 담당한다.

기본적으로 클라이언트가 url을 입력하면 URLConf를 통해 요청정보가 view에게 전달된다. 클래스뷰는 as_view()를 통해 전달되는데 여기서 dispatch() 메서드가 항상 자동으로 불러진다.

이러한 dispatch의 성격때문에 궁극적으로는 특정 유형의 요청이나 인수를 필터링하거나 수정하는데에 자주 사용된다. 위에서 내가 썼던 예시에서도 받은 요청으로 로그인한 사용자인지 확인 후 로그인한 사용자라면 다른 페이지로 리다이렉션 되도록 하였다.

Leave a comment