flask.views.MethodView 继承了什么?
为什么我们在类里传入 flask.views.MethodView
呢?
在这个代码片段中,app.add_url_rule
是什么?add_url_rule
是一个预定义的属性吗?
同样的,view_func
和 View.as_view
也是预定义的吗?
import flask, flask.views
app = flask.Flask(__name__)
class View(flask.views.MethodView):
def get(self):
return "Hello World!"
app.add_url_rule('/',view_func=View.as_view('main'))
app.debug = True
app.run()
1 个回答
4
View
是 flask.views.MethodView
类 的一个 子类。后者提供了一些基本功能,比如 as_view()
方法:
这个方法把类转换成一个可以和路由系统一起使用的实际视图函数。内部会动态生成一个函数,每次请求时都会实例化这个 View,并调用它的
dispatch_request()
方法。
你还可以查看 可插拔视图。
因为这不是一个基于 函数 的视图,所以你不能在它上面使用 @app.route()
装饰器。在这种情况下,你需要使用另一个方法 app.add_url_rule()
:
这个方法用来连接一个 URL 规则。它的工作方式和
route()
装饰器完全一样。如果提供了view_func
,它会和这个端点一起注册。
view_func
是这个方法的一个文档化的关键字参数;当请求注册的路径时(在你的例子中是 /
),Flask 会调用 as_view()
返回的内容。接着,它会调用 dispatch_request()
,然后如果 HTTP 请求使用的是 GET 方法,就会调用 View().get()
方法。