首先,要纠正两个错误!

1.flask是通过endpoint找到viewfunction(视图函数的),并不是通过路由直接找到viewfunction的。

2.是url_for(endpoint)而不是url_for(路由)

为什么很多人会有以上两种想法呢?因为,在构建路由的时候,如果不指定endpoint,系统定义为endpoint和viewfunction一个名字!!!!!!

注意:

  • 每个应用程序app都有一个view_functions,这是一个字典,存储endpoint-view_func键值对。add_url_rule的第一个作用就是向view_functions中添加键值对(这件事在应用程序run之前就做好了)
  • 每个应用程序app都有一个url_map,它是一个Map类(具体实现在werkzeug/routing.py中),里面包含了一个列表,列表元素是Role的实例(werkzeug/routing.py中)。add_url_rule的第二个作用就是向url_map中添加Role的实例(它也是在应用程序run之前就做好了)

    我们可以通过一个例子来看:
  • 实际上,当请求传来一个url的时候,会先通过rule找到endpoint(url_map),然后再根据endpoint再找到对应的view_func(view_functions)。通常,endpoint的名字都和视图函数名一样。
04-27 22:31