zoukankan      html  css  js  c++  java
  • 类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()
  • 相关阅读:
    devDependencies和dependencies的版本写法
    dependencies 与 devDependencies 的区别
    Java +selenium Navigation接口介绍
    Java + selenium window()接口方法介绍
    Java + selenium Timeout接口用法介绍
    Java + selenium 启动谷歌浏览器
    selenium 3 下载 + Java使用
    Rsync 实现服务器文件的同步——服务端的安装配置
    selenium V1.0和V2.0差别对比
    PHP的安装配置
  • 原文地址:https://www.cnblogs.com/soymilk2019/p/15100333.html
Copyright © 2011-2022 走看看