함수 대신 클래스를 기반으로 하는 장고의 제네릭 뷰에 영감을 받아 플라스크에서 도입한 것이 '플러거블 뷰' 라고 합니다
=> 말 그대로 끼워넣는 뷰로 사용자가 정의 가능한 뷰를 가질 수 있습니다.
class View
플러거블 뷰를 사용하기 위해서는 먼저 view를 상속받은 클래스를 만들고 dispatch_request()를 구현해야 합니다.
플러거블 뷰를 사용하기 전 먼저 view를 상속받은 클래스를 만들고 dispatch_request()를 구현해야 합니다
@app.route('/users/')
def show_users(page):
users = User.query.all()
return render_template('users.html', users=users)
이를 view로 바꾸기 위해서는
from flask.views import View
class ShowUsers(View):
def dispatch_request(self):
users = User.query.all()
return render_template('users.html', objects=users)
app.add_url_rule('/users/', view_func=ShowUsers.as_view('show_users'))
flask.views.View의 서브 클래스를 만들고 dispatch_request()를 구현하고, as_view()클래스 메소드를 사용해 실제 뷰 함수로 변환해야 합니다
그 함수로 전달하는 문자열은 뷰가 가질 end-point의 이름입니다.
위의 코드를 조금 바꿔보자면
from flask.views import View
class ListView(View):
def get_template_name(self):
raise NotImplementedError()
def render_template(self, context):
return render_template(self.get_template_name(), **context)
def dispatch_request(self):
context = {'objects': self.get_objects()}
return self.render_template(context)
class UserView(ListView):
def get_template_name(self):
return 'users.html'
def get_objects(self):
return User.query.all()
이렇게완성됩니다.