为什么我们在课堂上传递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()
答案 0 :(得分:4)
View
是flask.views.MethodView
class的子类。后者提供基本功能,如as_view()
method:
将类转换为可与路由系统一起使用的实际视图函数。在内部,它会动态生成一个函数,它将在每个请求上实例化View并在其上调用
dispatch_request()
方法。
由于这不是基于 function 的视图,因此您无法在其上使用@app.route()
装饰器。在这种情况下,您可以使用替代app.add_url_rule()
method:
连接网址规则。与
route()
装饰器完全一样。如果提供view_func
,则会向端点注册。
view_func
是此方法的文档关键字参数;当请求注册的路径时(在您的示例中为/
),然后Flask调用返回的as_view()
。反过来调用dispatch_request()
,如果HTTP请求使用GET方法,则会调用View().get()
方法。