# 即插视图 在Flask的视图中,采用OOP编程,这样就可以使用OOP的好处。 在Django中大量使用这种基于类的视图。 在这里我们主要将两种: - 标准视图 - 基于调度方法的视图 ## 标准视图 标准视图就是一个类,需要做的步骤是: - 继承自`flask.views.View` - 实现`dispatch_request`函数 - 实现自己的业务处理 - 利用`app.add_url_rule`注册上视图 ### 案例 案例利用标准视图,实现了对`url=/tuling` 的操作。 代码位置是`./v6/plug_view.py`: # 定义基本视图,没有处理具体业务逻辑 class BasicView(View): # 必须实现这个函数 # 这个函数的功能是对进入的url进行分配处理 def dispatch_request(self): if request.method != 'GET': return self.tuling_error() return self.handle_url() # 子类实现对具体业务逻辑的处理 class TulingView(BasicView): def handle_url(self): return "Handle URL {} by TULING".format(request.url) def tuling_error(self): return "404 by 刘大拿" # 注册基于类的视图 app.add_url_rule('/tuling/', view_func=TulingView.as_view("tuling_view")) ## 基于调度方法的视图 HTTP协议一共就几个请求方法,一般我们对应每一个请求方法都需要做一个处理,所以我们的视图处理如果 能自动对每种请求方法都调用对应的处理函数就省了很大的事, `flask.views.MethodView`提供每个HTTP请求方法对应的同名函数(函数名是小写),我们可以直接继承这个函数,这在编写`RESTful`请求 到时候非常有用。 一旦使用`MethodView`处理,一般就不需要手动编写`dispatch_request`。 代码位置是`./v6/plug_view.py`: # 使用MethodView一般就不需要使用disatch_view进行请求路径手动处理 class TulingMethodView(MethodView): def get(selfs): return "GET Method" def post(self): return "POST Method" # 注册基于类的视图 app.add_url_rule('/tuling/', view_func=TulingView.as_view("tuling_view")) app.add_url_rule('/method/', view_func=TulingMethodView.as_view("tuling_method_view")) >>> 从Flask0.8版开始,MethodView中可以添加 decorators 属性来实现对视图的装饰 > 例如: class TulingAPI(MethodView): decorators = [login_required] ... ...