(flask) Pluggable View, Class 에서 요청처리하기
Pluggable View 라고 말이 어려운데, 간단하게 말하자면 flask 는 기본적으로 url 과 함수의 맵핑으로 이루어져있다. 아래의 Quick Start 에서도 보면 알겠지만, url “/ ” 는 helloworld() 라는 함수에 맵핑이 되어 있어서 / 로 들어오게 되면 helloworld() 함수로 들어오게 된다.
main.py 를 서버를 시작하는 부분인데, 기존의 @app.route() 로 지정하는 것을 모두 제거 하였다. 두가지 URL을 처리할것인데,
/garden/02931
HomeView 에서 중요한 부분은 view를 슈퍼클래스로 가진다는 점이다. 그래서 homeView 객체를 생성할때도 일반적인 생성자로 생성하는 것이 아니라 asview() 클래스 메소드로 생성하는 것을 볼 수 있다. asview() 클래스 메소드에 대한 설명을 보면, ‘Converts the class into an actual view function’ 이라고 되어 있는것을 볼수 있다.
그리고 HomeView 클래스 안에서는 dispatch_request 메소드를 구현해야하는데, 사실상 이 함수에서 실질적인 view 코드가 동작한다고 보면된다. 그리고 이 메소드에서 @app.route() 로 지정했던 메소드에서 했던 일들을 적어주면 된다. HomeView 클래스에서는 id 를 가져와서 템플릿에 id를 전달해 주는 것을 볼 수 있다.
이 방식은 이전의 처리들을 다른 하나의 클래스로 분담해서 해당클래스의 dispatch_request 메소드에서 한다는 점이 특징이라고 볼수 있다. 그런데 http method 중에 get, post, put, delete 메소드 별로 나눠서 작업할 수 있는 방법을 제공하고 있기도 하다. 이 방법을 Method based Dispatching 이라고 flask 문서에서는 설명하고 있다.
이 방식은 기존의 View 클래스 대신에 MethodView 클래스를 슈퍼클래스로 하고 있는것을 볼수 있는데, dispatch_request 와 같이 사용할수도 있다. main.py 15번째 줄을 보면 gardenView 를 등록하는 부분을 볼수 있는데, /garden/
그렇게 등록을 하고 /garden/rose 이렇게 호출을 하면 GardenView 의 get(self, flower) 함수가 호출되는 것을 확인할수 있을것이다. 실제로 한번 해보면 그리 어렵지 않을것이다.
ps) 부제를 마음대로 Class 에서 요청처리하기 지었는데, 맞나 모르겠네