Esempio n. 1
0
    def match(self, request: Request):
        for fn in self.__pre_interceptor__ :
            request = fn(request)
            if request is None:
                return None

        # 必须先匹配前缀
        if not request.path.startswith(self.__prefix):
            return None
        # 前缀匹配,说明就必须这个 Router 实例独步一时,后续匹配不上,依然返回 None
        for methods, pattern, types, handler in self.__routetable:
            print(methods, pattern, types, handler)
            # not methods 表示一个方法都没有定义,就是支持全部方法
            if not methods or request.method.upper() in methods:
                # 前提已经是以__prefix开头了,可以 replace,去掉 prefix 剩下的才是正则表达式需要匹配的路径
                noprefix = request.path.replace(self.__prefix, '', 1)
                matcher = pattern.match(noprefix)
                if matcher:  # 正则匹配
                    # 动态为 request 增加属性
                    request.groups = matcher.groups()  # 所有的分组组成的元组,包括命名分组
                    # 解决类型问题
                    newdict = {}
                    for k, v in matcher.groupdict().items():
                        newdict[k] = types[k](v)
                    request.groupdict = AttrDict(newdict)  # 命名分组组成的字典
                    response =  handler(request)
                    for fn in self.__post_interceptor__:
                        response = fn(request,response)
                    return response
 def __call__(self, request:Request):
     for method, pattern, handler in self._Route.ROUTETABLE:
         if request.method in method or not method:
             matcher = pattern.match(request.path)
             if matcher:
                 request.groups = matcher.groups()
                 request.groupdict = matcher.groupdict()
                 return handler(request)
     raise HTTPNotFound('<h1>ERROR PAGE</h1>')
Esempio n. 3
0
 def __call__(self, request: Request):
     for method, pattern, handler in self._Route.ROUTETABLE:
         # 判断方法是否相等必须使用continue;因为路由类中注册了多条路由,如果使用break或return;则把其他注册的路由也跳过,这样使不合理的
         if request.method != method:
             continue
         matcher = pattern.match(request.path)
         if matcher:
             request.groups = matcher.groups()
             request.groupdict = matcher.groupdict()
             return handler(request)
     raise HTTPNotFound('<h1>ERROR PAGE</h1>')
 def __call__(self, request:Request):
     for pattern, handler in self._Route.ROUTETABLE:
         matcher = pattern.match(request.path)
         if matcher:
             # 所有分组组成的元组,包含命名分组
             # 1,动态在对象上添加
             # 2,可以利用传参的方式
             request.groups = matcher.groups()
             request.groupdict = matcher.groupdict()
             # 匹配成功,则交由对应的handler处理程序处理
             return handler(request)
     # 所有都没有匹配则抛出找不到异常
     raise HTTPNotFound('<h1>ERROR PAGE</h1>')
Esempio n. 5
0
 def __call__(self, request: Request):
     for methods, pattern, handler in self._Router.ROUTERTABLE:
         # 判断方法是否为空或请求方法在注册的方法中
         if not methods or request.method in methods:
             # 正则匹配请求的路径
             matcher = pattern.match(request.path)
             if matcher:
                 # setattr对request对象设置属性
                 request.groups = matcher.groups()
                 request.groupdict = matcher.groupdict()
                 # setattr(request, 'groups', matcher.groups())
                 # setattr(request, 'groupdict', matcher.groupdict())
                 # handler处理方法
                 return handler(request)
     raise HTTPNotFound('<h1>ERROR PAGE</h1>')
 def match(self, request: Request):
     # 如果请求开头没有匹配成功;则return一个None
     if not request.path.startswith(self.__prefix):
         return None
     # 7,头部匹配成功,则进入path处理
     for methods, pattern, handler in self.__routetable:
         if not methods or request.method in methods:
             matcher = pattern.match(
                 request.path.replace(self.__prefix, '', 1))
             if matcher:
                 request.groups = matcher.groups()
                 request.groupdict = AttrDict(matcher.groupdict())
                 # request.groupdict = matcher.groupdict()
                 # 最后调用handler处理函数,传入request,进行处理
                 return handler(request)
Esempio n. 7
0
    def match(self, request: Request):
        # 前缀没有匹配成功,则返回None
        if not request.path.startswith(self.__prefix):
            return None

        for methods, pattern, handler in self.__routetable:
            if not methods or request.method.upper() in methods:
                # 前缀匹配成功,通过replace去掉prefix剩下的才是正则表达式需要匹配的路径
                matcher = pattern.match(
                    request.path.replace(self.__prefix, '', 1))
                if matcher:
                    request.groups = matcher.groups()  # 所有分组组成的元组,包含命名分组
                    request.groupdict = AttrDict(
                        matcher.groupdict())  # 命名分组组成的字典被属性化
                    return handler(request)
Esempio n. 8
0
 def __call__(self, request: Request):
     path = request.path
     for method, pattern, handler in self._Router.ROUTERTABLE:
         if not method == request.method.upper():
             continue
         matcher = pattern.match(path)
         print('method=', request.method.upper())
         if matcher:
             print(matcher.groups())
             print(matcher.group(0))
             print(matcher.group(1))
             print(22222, matcher.groupdict())
             request.groups = matcher.groups()
             request.groupdict = matcher.groupdict()
             return handler(request)
Esempio n. 9
0
 def match(self, request: Request):
     # 必须先匹配前缀
     if not request.path.startswith(self.__prefix):
         return None
     # 前缀匹配,说明就必须这个 Router 实例独步一时,后续匹配不上,依然返回 None
     for methods, pattern, handler in self.__routetable:
         # not methods 表示一个方法都没有定义,就是支持全部方法
         if not methods or request.method.upper() in methods:
             # 前提已经是以__prefix开头了,可以 replace,去掉 prefix 剩下的才是正则表达式需要匹配的路径
             matcher = pattern.match(
                 request.path.replace(self.__prefix, '', 1))
             if matcher:  # 正则匹配
                 # 动态为 request 增加属性
                 request.groups = matcher.groups()  # 所有的分组组成的元组,包括命名分组
                 request.groupdict = AttrDict(
                     matcher.groupdict())  # 命名分组组成的字典
                 return handler(request)