首先,要纠正两个错误!
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
的名字都和视图函数名一样。