路由注册
传统方式
若要实现一个简化版的 "Web 应用" 路由系统,主要用于展示如何手动注册路由与相应的视图函数,并且在控制台输出已注册的路由信息,这段代码如下:
# 存储路由的字典
url_map = {}
def add_route(rule, func):
"""手动注册路由的函数"""
print(f"正在注册路由: {rule} -> {func.__name__}")
url_map[rule] = func # 注册路由
def run():
"""运行已注册的路由"""
print("应用正在运行,已注册的路由如下:")
for rule, func in url_map.items():
print(f"注册路由: {rule} -> {func.__name__}")
def home():
return "欢迎来到首页!"
def about():
return "这是关于页面!"
# 手动添加路由
add_route('/', home)
add_route('/about', about)
if __name__ == '__main__':
run() # 运行自定义的 Flask 应用

使用函数装饰器
装饰器通过语法糖简洁地注册路由,将路由注册与视图逻辑分离,使得代码结构更加清晰。保持代码的整洁性,避免重复的函数调用。
函数式 Flask 实现示例
在这个示例中,我们将实现一个简单的装饰器来注册路由,并使用全局字典来存储路由与视图函数的映射:
# 存储路由的字典
url_map = {}
def route(rule):
"""装饰器工厂,用于注册路由"""
print(f"route 方法被调用,准备注册路由: {rule}")
def decorator(func):
"""内部装饰器,用于将视图函数与路由关联"""
print(f"正在注册路由: {rule} -> {func.__name__}")
url_map[rule] = func # 注册路由
return func # 返回原函数
return decorator # 返回内部装饰器
def run():
"""运行已注册的路由"""
print("应用正在运行,已注册的路由如下:")
for rule, func in url_map.items():
print(f"注册路由: {rule} -> {func.__name__}")
# 使用装饰器注册路由
@route('/') # 注册路由 '/'
def home():
return "欢迎来到首页!"
@route('/about') # 注册路由 '/about'
def about():
return "这是关于页面!"
if __name__ == '__main__':
run() # 运行自定义的 Flask 应用
decorator 函数:
- 包含实际的注册逻辑,将视图函数与给定的路由关联在一起,并输出相关信息。
面向对象:使用类实例属性管理路由
class MyFlask:
def __init__(self):
self.url_map = {} # 存储路由的字典
print("MyFlask 实例已创建,url_map 初始化为空字典。")
def route(self, rule): # 装饰器工厂
print(f"route 方法被调用,准备注册路由: {rule}")
def decorator(func): # 内部装饰器
print(f"正在注册路由: {rule} -> {func.__name__} (内存地址: {id(func)})")
self.url_map[rule] = func # 注册路由
return func # 返回原函数
return decorator # 返回内部装饰器
def run(self):
print("应用正在运行,已注册的路由如下:")
for rule, func in self.url_map.items():
print(f"注册路由: {rule} -> {func.__name__} (内存地址: {id(func)})")
# 创建 MyFlask 实例
app = MyFlask()
@app.route('/') # 注册路由 '/'
def home():
return "欢迎来到首页!"
@app.route('/about') # 注册路由 '/about'
def about():
return "这是关于页面!"
if __name__ == '__main__':
app.run() # 运行自定义的 Flask 应用
输出步骤说明
- 创建 MyFlask 实例:
MyFlask 实例已创建,url_map 初始化为空字典。
这行输出表示MyFlask
类的实例app
被创建,并初始化了一个空的url_map
。
- 调用
route
方法:- 当你使用
@app.route('/')
装饰器时,它会调用route
方法。 - 输出
route 方法被调用,准备注册路由: /
表示这个方法被调用,并准备为路径'/'
注册路由。
- 当你使用
- 注册路由的过程:
- 在
decorator
内部,输出正在注册路由: / -> home
显示了即将将home
函数与 URL 路径'/'
进行绑定。
- 在
- 重复处理
/about
路由:- 同样的步骤会发生在注册
/about
路由时,先输出提示,然后注册。
- 同样的步骤会发生在注册
- 应用运行:
- 最后,调用
app.run()
,输出应用正在运行,已注册的路由如下:
进入到run
方法。 - 遍历并展示所有已注册的路由,输出
注册路由: / -> home
和注册路由: /about -> about
。
- 最后,调用
发布者:LJH,转发请注明出处:https://www.ljh.cool/43047.html