lask——装饰器路由的具体实现

Flask有两大核心:Werkzeug和Jinja2

- Werkzeug实现路由、调试和Web服务器网关接口
- Jinja2实现了模板。
Werkzeug是一个遵循WSGI协议的python函数库

- 其内部实现了很多Web框架底层的东西,比如request和response对象;
- 与WSGI规范的兼容;支持Unicode;
- 支持基本的会话管理和签名Cookie;
- 集成URL请求路由等。
Werkzeug库的 routing 模块负责实现 URL 解析。不同的 URL 对应不同的视图函数,routing模块会对请求信息的URL进行解析,匹配到URL对应的视图函数,执行该函数以此生成一个响应信息。

routing模块内部有:

Rule类
用来构造不同的URL模式的对象,路由URL规则
Map类
存储所有的URL规则和一些配置参数
BaseConverter的子类
负责定义匹配规则
MapAdapter类
负责协调Rule做具体的匹配的工作

装饰器路由实现总结

	装饰器路由是通过三个类实现的:Rule、Map、Mapadapter.
	1.程序实例app通过app调用route方法,	内部使用了add_url_rule方法,该方法通过调用url_rule_class方法,把url和method和endpoint存储在Rule类的对象中,端点即视图函数名的字符串形式。
	2.在add_url_rule方法中,flask是通过url_map.add方法,把灭个Rule类的对象,存储在Map容器,即url_app.
	3.在MapAdapter类中,通过实例化match方法从Map容器中,拿到每个Rule类对象,通过正则匹配每个url字符串,以及对应的请求方法和端点,满足请求条件,调用端点对应的视图函数名。

猜你喜欢

转载自blog.csdn.net/weixin_43617255/article/details/83827441