flask.views.MethodView 继承了什么?

0 投票
1 回答
3034 浏览
提问于 2025-04-18 10:56

为什么我们在类里传入 flask.views.MethodView 呢?

在这个代码片段中,app.add_url_rule 是什么?add_url_rule 是一个预定义的属性吗?

同样的,view_funcView.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

Viewflask.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() 方法。

撰写回答