类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()
复制代码

 

posted @   豆浆D  阅读(162)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示