• 类flask框架路由分组功能


    路由分组

    from wsgiref.simple_server import make_server
    import cgi
    from urllib import parse
    import webob
    from webob.dec import wsgify
    from webob.exc import HTTPNotFound
    import re
    
    class Route:
        ROUTETABLE = []
        def __init__(self, prefix:str=''):
            self.__prefix = prefix.rstrip('/\')
            self.__routetable = []
    
        def route(self, pattern, *methods):
            def wraper(handler):
                self.__routetable.append((tuple(map(lambda x:x.upper(), methods)), re.compile(pattern), handler))
                return handler
            return wraper
    
    
        def get(self, pattern):
            return self.route(pattern, 'GET')
    
        def post(self, pattern):
            return self.route(pattern, 'POST')
    
        def head(self, pattern):
            return self.route(pattern, 'HEAD')
    
        def match(self, request):
            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:
                    if pattern.match(request.path.replace(self.__prefix,'',1)):
                        return handler(request)
    
    class App:
        __ROUTES = []
    
        @classmethod
        def register(cls, *routers):
            for router in routers:
                cls.__ROUTES.append(router)
    
        @wsgify
        def __call__(self, request):
            for router in self.__ROUTES:
                response = router.match(request)
                if response:
                    return response
    
            raise HTTPNotFound('<h1>你访问的页面被外星人劫持了</h1>')
    
    
    ind = Route()
    python = Route('/python')
    App.register(ind, python)
    
    @ind.route('^/$')
    def indexhandler(request):
        return 'index page'
    
    @python.get('^/python$')
    def pythonhandler(request):
        return 'python page'
    
    
    if __name__ == '__main__':
        ip = '127.0.0.1'
        port = 9999
        server = make_server(ip, port, App())
        try:
            server.serve_forever()
        except KeyboardInterrupt:
            server.shutdown()
            server.server_close()
  • 相关阅读:
    显示进度条
    LEAVE&nbsp;LIST-PROCESSING&nbsp;…
    博主心声
    sap设置权限
    快捷键大全
    VS快捷键
    vs中图片资源的横竖屏的影响
    error C4430: 缺少类型说明符
    cocos2dx3.3 使用cocos studio2.0 导出的.csb文件
    让cocos2d-x 3.0读取cocostudio中的csb文件
  • 原文地址:https://www.cnblogs.com/soymilk2019/p/15100333.html
Copyright © 2020-2023  润新知