Web路由列表

什么是Web路由列表

在Web开发中,路由列表通常用于将请求的URL映射到相应的处理函数。尽管路由列表可以用不同的数据结构来实现,但在很多情况下是一个字典(在Python中)或其他类似的键值对结构。

Web路由列表_第1张图片

路由列表(Django)

Django框架采用的路由列表方式是在模块中创建一个带有映射关系的字典,映射关系要自己写,适用于较少的映射关系

路由字典模块

from Test import route_function

route_dict = {
    "index.py": route_function.index,
    "center.py": route_function.center,
    "gettime.py": route_function.gettime
}

for item in route_dict:
    print(route_dict[item])
    route_dict[item]()

"""打印字典键的值可以看出,是一个函数的地址





函数的执行结果
This is index
This is center
This is gettime
"""

响应函数模块

def index():
    print("This is index")


def center():
    print("This is center")


def gettime():
    print("This is gettime")

路由装饰器(flask)

flask框架的路由列表采用的是装饰器方法来生成路由列表,需要创建一个装饰器工厂直接对处理函数进行装饰即可,适用于较多的映射关系

一个空字典模块

router_dict = {}

装饰器模块

from Test import urls


def router(path):
    """需要传入访问的路径,用于添加到路由字典的key"""

    def function_out(func):
        """需要传入函数,将函数的内存地址存到字典的value"""
        # 在此处将映射关系添加到字典最为合适
        # 因为,路径和函数在内存中的地址都已经出现了
        # 将映射关系添加到字典中
        urls.router_dict[path] = func

        def function_in():
            # 返回映射函数的地址
            func()

        return function_in

    return function_out


@router("index.py")
def index():
    print("This is index")


@router("center.py")
def center():
    print("This is center")


@router("gettime.py")
def gettime():
    print("This is gettime")

测试模块

from Test import urls
from Test import funs

print(urls.router_dict)
for item in urls.router_dict:
    print(urls.router_dict[item])
    urls.router_dict[item]()

"""
可以看到装饰器模块导入后,字典中的值被自动添加进去了
因为模块导入后会被加载到内存,在内存中,装饰器就已经开始生效了
{'index.py': , 
'center.py': ,
 'gettime.py': }
 
 

This is index


This is center


This is gettime
"""

你可能感兴趣的:(django,flask,python)