Flask源码学习笔记2:路由映射

简单的路由绑定就像这样

1
2
3
@app.route('/')
def index():
pass

在Flask内部可以这样做

1
2
3
def index():
pass
app.add_url_rule('/', 'index', index)

在add_url_rule函数中核心代码主要是这几行

1
2
3
4
5
6
rule = self.url_rule_class(rule, methods=methods, **options)
self.url_map.add(rule)
if view_func is not None:
...
self.view_functions[endpoint] = view_func

其中url_rule_class和url_map都是利用的werkzeug.routing的代码,核心的类就是Rule, Map, MapAdapter,代码看的我头疼,一方面现在智力下滑严重,很多看不懂,另外一方面,感觉怎么这么麻烦不就是简单的从url到具体函数的匹配么?可是深入看的话,发现人家的功能确实强大,比如可以进行变量转换,还能生成url。