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')]