五、FBV与CBV
1、FBV与CBV
FBV(function base views):基于函数的视图,就是在视图里使用函数处理请求
CBV(class base views):基于类的视图,就是在视图里使用类处理请求。
2、flask中的FBV和CBV使用方式(两种方式都必须通过add_rule_url方法将其添加到路由映射里面,不可以使用装饰器)
FBV:
@app.route("/") def index(): return "Hello World"
CBV:
第一种方式:所有在methods里面注册的请求都会经过dispatch_request方法,如果想要让对应的请求执行对应的方法,必须手动在dispatch_request里面通过反射来实现,所以第一种方式基本不用,主要是用第二种方式。
1 class HomeView(views.View): 2 # 可以处理的方法 3 # methods = [], 4 # 装饰器 5 # decorators = (,), 6 # provide_automatic_options = {} 7 8 # 通过的请求都走这里,必须被重载 9 def dispatch_request(self): 10 return "Hello View" 11 12 13 app.add_url_rule("/home", endpoint=None, view_func=HomeView.as_view(name="home"))
第二种方式:第二种方式与django类似,MethodView已经实现了请求分发,直接编写对应的处理方法
1 class HomeView(views.MethodView): 2 def get(self): 3 return "GET, home!" 4 5 def post(self): 6 return "Post, home!" 7 8 9 app.add_url_rule("/home", endpoint=None, view_func=HomeView.as_view(name="home"))