上海网站建设案例,网站官方首页设计,西安宝马建设科技股份有限公司网站,的推网站模板目录4.CBV和FBV4.1 继承 views.View4.2 继承 views.MethodView4.CBV和FBV
前面的例子中#xff0c;都是基于视图函数构建视图#xff08;FBV#xff09;#xff0c;和Django一样#xff0c;Flask也有基于类构建视图#xff08;CBV#xff09;的方法。这种方式用的不多都是基于视图函数构建视图FBV和Django一样Flask也有基于类构建视图CBV的方法。这种方式用的不多可了解。
由于视图类本身不是添加到路由系统的视图函数真正的视图函数是类的as_view()的返回值。并且手动使用app.add_url_rule()函数添加路由。
视图类中主要有两个常用的属性
methods表明可接受的请求方法是个列表可选多个decorators表明需要加在这个类的视图函数上的装饰器是个列表可选多个
CBV有如下两种方式
4.1 继承 views.View
继承 views.View。在dispatch_request函数中写具体的处理逻辑不同的请求方法需要判断。
# CBV示例
from flask import Flask, views
import functoolsapp Flask(__name__)def wapper(func):functools.wraps(func)def inner(*args, **kwargs):print(inner)return func(*args, **kwargs)return innerclass IndexView(views.View):methods [GET, PUT]# 添加装饰器加载这个类下的方法上decorators [wapper, ]def dispatch_request(self):if request.method GET:print(GET Index)return Indexelse if request.method PUT:print(PUT Index)return Indexapp.add_url_rule(/index, view_funcIndexView.as_view(nameindex)) # name是endpointif __name__ __main__:app.run()4.2 继承 views.MethodView
每个 HTTP 方法都映射到一个同名的类方法名称为小写字母可以完成反射。
# CBV示例
from flask import Flask, views
import functoolsapp Flask(__name__)def wapper(func):functools.wraps(func)def inner(*args, **kwargs):print(inner)return func(*args, **kwargs)return innerclass IndexView(views.MethodView):methods [GET, POST]# 添加装饰器加载这个类下的方法上decorators [wapper, ]def get(self):print(get 请求)return getdef post(self):print(post 请求)return postapp.add_url_rule(/index, view_funcIndexView.as_view(nameindex)) # name是endpointif __name__ __main__:app.run()使用这种方式也可不提供 methods属性它会自动使用相应的类方法。