什么是Web路由列表
在Web开发中,路由列表通常用于将请求的URL映射到相应的处理函数。尽管路由列表可以用不同的数据结构来实现,但在很多情况下是一个字典(在Python中)或其他类似的键值对结构。
路由列表(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]()
"""打印字典键的值可以看出,是一个函数的地址
<function index at 0x000001F05D2418A0>
<function center at 0x000001F05D241940>
<function gettime at 0x000001F05D2419E0>
函数的执行结果
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': <function index at 0x000001CD661519E0>,
'center.py': <function center at 0x000001CD66151B20>,
'gettime.py': <function gettime at 0x000001CD66151C60>}
<function index at 0x000001CD661519E0>
This is index
<function center at 0x000001CD66151B20>
This is center
<function gettime at 0x000001CD66151C60>
This is gettime
"""