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方法,但功能不同。

 

 下面的URLResolver(urlconf_module) = [path('login/', baseviews.login, name='login')]

 

posted @ 2023-07-18 15:36  khalil12138  阅读(61)  评论(0编辑  收藏  举报