Esempio n. 1
0
 def __call__(self, request: Request) -> Response:
     for methods, pattern, handler in self.ROUTETABLE:
         if not methods or request.method in methods:
             if request.method.upper() == "GET":
                 matcher = pattern.match(request.path)
                 if matcher:
                     # 动态增加属性
                     request.args = matcher.group()  # 所有分组组成的元组,包括命名的
                     request.kwargs = matcher.groupdict()  # 命名分组组成的字典
                     return handler(request)
     raise exc.HTTPNotFound("<h1>您访问的页面被外星人劫持了</h1>")
Esempio n. 2
0
 def __call__(self, request: Request):
     for methods, pattern, handler in self.Routable:
         # not methods表示一个方法都没有定义,即支持所有方法
         if not methods or request.method.upper() in methods:
             matcher = pattern.match(request.path)
             if matcher:
                 # 动态增加属性,为request增加了args、kwargs属性,在handler中使用的时候
                 # 就可以直接从属性中,将args、kwargs拿出来就可以直接使用了
                 request.args = matcher.group()  # 所有分组组成的元组,包括命令的
                 request.kwargs = matcher.groupdict()  # 命名分组组成的字典
                 return handler(request)
     raise exc.HTTPNotFound('<h1>您访问的页面被外星人劫持了</h1>'.encode())
Esempio n. 3
0
 def match(self, request: Request):
     if not request.path.startswith(self.prefix):  # 减少嵌套层次
         return
     for methods, pattern, handler in self.__routetable:
         if not methods or request.method.upper() in methods:
             matcher = pattern.match(request.path.replace(
                 self.prefix, ""))  # pattern 是prefix后面的所以匹配的字符串也需要去掉prefix
             if matcher:
                 request.args = matcher.group()
                 request.kwargs = Dict2Obj(
                     matcher.groupdict())  # request.kwargs.k   -> k可以直接访问
                 return handler(request)
Esempio n. 4
0
 def __call__(self,request:Request) -> Response:
     print(request.path)
     #return self.ROUTETABLE.get(request.path,self.notfound)(request)
     for methods, pattern, handler in self.ROUTETABLE:
         #methods为None时表示支持任意http请求方法
         if not methods or request.method.upper() in methods:
                 matcher = pattern.match(request.path)
                 if matcher:
                     #动态属性增加
                     request.args = matcher.group()      #所有分组组成的元组,包括命名的
                     request.kwargs = matcher.groupdict()        #命名分组组成的字典
                     return handler(request)
     raise exc.HTTPNotFound("您访问的网页被外星人劫持了")
Esempio n. 5
0
 def match(self,request:Request) -> Response:
     print(request.path)
     #return self.ROUTETABLE.get(request.path,self.notfound)(request)
     for methods, pattern, handler in self.__routetable:
         if not request.path.startswith(self.prefix):
             return None
         #methods为None时表示支持任意http请求方法
         if not methods or request.method.upper() in methods:
             matcher = pattern.match(request.path.replace(self.prefix,'',1))
             if matcher:
                 #动态属性增加
                 request.args = matcher.group()      #所有分组组成的元组,包括命名的
                 request.kwargs = DictObj(matcher.groupdict())       #命名分组组成的字典
                 return handler(request)
Esempio n. 6
0
 def match(self, request: Request):
     # 前缀处理,prefix是一级的
     if not request.path.startswith(self.__prefix):
         return
     for methods, pattern, handler in self.__routable:
         if not methods or request.method.upper() in methods:
             # not methods表示一个方法都没有定义,就让其支持全部方法
             matcher = pattern.match(request.path.replace(self.__prefix, '', 1))
             if matcher:
                 # 动态增加属性,为request增加了args、kwargs属性,在handler中使用的时候,
                 # 就可以直接从属性中,将args、kwargs拿出来就可以直接使用了
                 request.args = matcher.group()
                 request.kwargs = matcher.groupdict()
                 return handler(request)
Esempio n. 7
0
 def __call__(self, request: Request) -> Response:
     for methods, pattern, handler in self.ROUTE:
         if methods:
             if isinstance(
                     methods,
                 (list, tuple, set)) and request.method not in methods:
                 continue
             if isinstance(methods, str) and methods != request.method:
                 continue
             m = pattern.match(request.path)
             if m:
                 request.args = m.groups()
                 request.kwargs = _Var(m.groupdict())
                 return handler(request)
     raise exc.HTTPNotFound('Not Fount')
Esempio n. 8
0
def wsgiapp(env, start_response):
    request = Request(env)
    request.args = getattr(request, request.method,{})
    request.user_id = 0

    # Try to hit actual responders
    for n, c in handlers.iteritems():
        if request.path_info == '/%s' % n:
            try:
                resp = c().render(request)
            except Exception, e:
                traceback.print_exc()
                e_msg = "Oh snaps, I messed up. SOWEE."
                start_response("500 SERVER ERROR",
                               [('content-type','text/html'),
                                ('content-length',len(e_msg))])
                return [e_msg]
            start_response(resp.status,
                           resp.headerlist)
            return [resp.body]
Esempio n. 9
0
    def match(self,request:Request) -> Response:
        #判断是否属于这个Router实例管辖的路由prefix前缀
        if not request.path.startswith(self.__prefix):
            return None

        #TODO  router做请求处理前的拦截
        for fn in self.pre_interceptor:
            request = fn(self.ctx,request)


        for methods,pattern,handler in self.__routertable:
            if not methods or request.method.upper() in methods:
                matcher = pattern.match(request.path.replace(self.__prefix,"",1))
                if matcher:
                    request.args = matcher.group()
                    #在这里包装一下我们获得的属性,但是不允许在修改
                    request.kwargs = DictObj(matcher.groupdict())
                    response  = handler(self.ctx,request)

                    #TODO router局部做请求响应前的拦截
                    for fn in self.post_interceptor:
                        response = fn(self.ctx,request,response)

                    return  response