在Web开发中,路由列表通常用于将请求的URL映射到相应的处理函数。尽管路由列表可以用不同的数据结构来实现,但在很多情况下是一个字典(在Python中)或其他类似的键值对结构。
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框架的路由列表采用的是装饰器方法来生成路由列表,需要创建一个装饰器工厂,直接对处理函数进行装饰即可,适用于较多的映射关系
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
"""