1. 使用带有参数的装饰器添加路由

前面我们已经实现了路由列表,但是每次添加路由都需要手动添加来完成,接下来我们想要完成路由的自动添加,可以通过装饰器来实现,在使用装饰器对处理函数进行装饰的时候我们需要知道装饰的函数和那个请求路径进行关联,也就是说装饰器需要接收一个url参数,这样我们定义的装饰器是一个带有参数的装饰器。

示例代码:


"""miniweb框架,负责处理动态资源请求"""
import time# 定义路由列表
route_list = []# 定义带有参数的装饰器
def route(path):# 装饰器def decorator(func):# 当执行装饰器装饰指定函数的时候,把路径和函数添加到路由列表route_list.append((path, func))def inner():# 执行指定函数return func()return inner# 返回装饰器return decorator# 获取首页数据
@route("/index.html")
def index():# 响应状态status = "200 OK";# 响应头response_header = [("Server", "PWS2.0")]# 打开模板文件,读取数据with open("template/index.html", "r") as file:file_data = file.read()# 处理后的数据, 从数据库查询data = time.ctime()# 替换模板文件中的模板遍历result = file_data.replace("{%content%}", data)return status, response_header, result# 获取个人中心数据
@route("/center.html")
def center():# 响应状态status = "200 OK";# 响应头response_header = [("Server", "PWS2.0")]# 打开模板文件,读取数据with open("template/center.html", "r") as file:file_data = file.read()# 处理后的数据, 从数据库查询data = time.ctime()# 替换模板文件中的模板遍历result = file_data.replace("{%content%}", data)return status, response_header, result# 没有找到动态资源
def not_found():# 响应状态status = "404 Not Found";# 响应头response_header = [("Server", "PWS2.0")]# 处理后的数据data = "not found"return status, response_header, data# 处理动态资源请求
def handle_request(env):# 获取动态请求资源路径request_path = env["request_path"]print("接收到的动态资源请求:", request_path)# 遍历路由列表,选择执行的函数for path, func in route_list:if request_path == path:result = func()return resultelse:# 没有找到动态资源result = not_found()return result

2. 小结

  • 使用带有参数的装饰器对处理函数进行装饰,并完成路由的添加功能。

装饰器方式的添加路由相关推荐

  1. Python:闭包(简介、使用方法、nonlocal修改闭包内使用的外部变量)、装饰器(定义、作用、通用装饰器、多个装饰器、带参数的装饰器、类装饰器、装饰器方式添加WEB框架的路由)

    一.闭包的介绍 闭包可以保存函数内的变量 当闭包执行完毕,外部函数的变量才释放. # 闭包的作用:可以保存外部函数的变量 # 闭包的形成条件 # 1.函数嵌套 # 2.内部函数使用了外部函数的变量或者 ...

  2. django class类即视图类添加装饰器的几种方法

    根据别人发布整理,个人爱好收集(原文:https://blog.csdn.net/mydistance/article/details/83958655 ) 一.定义视图类 定义类视图,且类视图继承自 ...

  3. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

    Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...

  4. Python 装饰器详解(上)

    Python 装饰器详解(上) 转自:https://blog.csdn.net/qq_27825451/article/details/84396970,博主仅对其中 demo 实现中不适合pyth ...

  5. 如何理解Python装饰器?

    Python 装饰器使用非常地简单.任何会使用 Python 函数的人都可以学习使用装饰器: Python 1 2 3 @somedecorator def some_function():      ...

  6. Javascript 装饰器极速指南

    pablo.png Decorators 是ES7中添加的JavaScript新特性.熟悉Typescript的同学应该更早的接触到这个特性,TypeScript早些时候已经支持Decorators的 ...

  7. JavaScript装饰器模式

    装饰器模式 适配器模式是原来的接口就不能用了,需要做一个适配之后才能继续使用. 装饰器是原先接口还能用,在此基础上添加一些新功能.(为对象添加新功能,并且不改变原有结构和功能) 下面我们来举一个装饰器 ...

  8. [python 进阶] 第7章 函数装饰器和闭包

    文章目录 7.1 装饰器基础知识 7.2 Python何时执行装饰器 7.3 使用装饰器改进"策略" 7.4 变量作用域(global) 备注 -比较字节码(暂略) 7.5 闭包 ...

  9. Python 装饰器详解(中)

    Python 装饰器详解(中) 转自:https://blog.csdn.net/qq_27825451/article/details/84581272,博主仅对其中 demo 实现中不适合pyth ...

最新文章

  1. Linux 数据同步方案
  2. Java把List转换为String使用stream(functional programming in java)
  3. 动态库与静态库优缺点比较(转 侵删)
  4. 两张表的笛卡尔积用sql语句
  5. 委托事件实现更新窗体
  6. 第六章网络安全技术与产品考试要点及真题分布
  7. java工具类使用_Java工具类使用注意事项
  8. python的设计哲学是优雅明确简单_Python简单教程
  9. 2018 Multi-University Training Contest 3: G. Interstellar Travel(凸包)
  10. Systrace 解析
  11. 离散数学主析取范式及主合取范式
  12. 8,JESD204B协议介绍
  13. 【LeetCode - 379】电话目录管理系统
  14. AI相关英语词汇(持续更新)
  15. 新产品常用的网络广告发布方法有哪些?
  16. RecyclerView的使用
  17. md5sum命令的使用
  18. xml图片太大_XML的大图片还是Goo的大球图?
  19. 指尖江湖李忘生鸿蒙初开,剑网3指尖江湖李忘生技能怎么搭配_李忘生技能搭配_3DM手游...
  20. 记首次参加网络安全比赛(初赛-知识竞赛,决赛-CTF夺旗赛-解题模式)

热门文章

  1. 联手中科大、浙大、华科大等高校,阿里研发4项最新AI安全技术
  2. “半真半假”DeepFake换脸也能精准识别?阿里安全提出全新检测方法
  3. 数十名工程师作战5天,阿里达摩院连夜研发智能疫情机器人
  4. ICCV 2019 | 无需数据集的Student Networks
  5. 百炼智百炼智能获5000万元Pre-A轮融资,深耕智能获客赛道
  6. “史上最强”BigGAN公开TensorFlow Hub demo!
  7. 李飞飞团队最新论文:如何对图像中的实体精准“配对”?
  8. AI一分钟 | 都还没普及,智能音箱就开始急匆匆推广告了;全球路况最差的莫斯科,倒成了无人驾驶的绝佳训练场
  9. 如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始...
  10. 又双叒有兄弟因为 YYYY-MM-dd 被叫去加班了...