Day-4 路由匹配源码

1. 请求来了会走WSGIHandler的call方法

convert_exception_to_response也是进行封装

真的handler是从下图定义

 

 

 

 

 resolver = URLResolver(RegexPattern(….))

那么

resolver.pattern = RegexPattern(R”^/”)

resolver.urlconf_name = “day006.urls”

 

接下来执行

resolver_match = resolver.resolve(request.path_info)

 执行resolver就是URLResolver下的resolve方法里面传了request.path_info 就是”/info/v1/”

 所以第四步里的pattern就是根路由文件中urlpattern列表中的一个一个元素

 day003中提到urlpattern中元素本质是 URLPattern对象和URLResolver对象(路由分发)

所以

for pattern in self.url_patterns:
try:
sub_match = pattern.resolve(new_path)

这里的就相当于执行各自的resolve方法进行匹配

如果是静态路由

就会执行 URLPattern.resolver(‘info/v1/’)

 URLResolver通过self.封装参数,执行resolve函数

 这里的is_endpoint代表view不可执行,什么时候能执行is_endpoint =True

就比如静态路由view直接可执行is_endpoint直接等于True

 

静态路由和路由分发都会走各自的resolve方法,但功能不同。

 

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYhXbGzN' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片