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. PyTorch官方培训教程上线:从基本概念到实操,小白也能上手
  2. 达内出来的混得怎么样了_《士兵突击》主演现状:混得最好的不是王宝强,而是一向低调的他...
  3. iOS 9应用开发教程之创建iOS 9项目与模拟器介绍
  4. 【mysql问题】foreign key without name 解决方法
  5. 认识httphandler
  6. c语言中分数的类型,用C语言编程平均分数
  7. python 投屏_这款神器,完美解决了手机投屏的问题
  8. Java示例:如何执行进程并读取输出
  9. Windows系统结构
  10. 将十进制IP转换成二进制IP
  11. 全能鼠标连点器之自动点击王软件
  12. NODDI在临床研究中的应用
  13. 一个支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱
  14. 部署ecshop网站
  15. python操作Jinkins
  16. 利用Python,通过关键字获取漏洞平台最新漏洞信息
  17. php strtolower 大写,PHP strtolower()用法及代码示例
  18. promox VE各版本ISO下载及安装教程
  19. 习题6-5巡逻机器人 UVa 1600 bfs
  20. 电脑BIOS密码的设置与修改方法

热门文章

  1. 当最懂 5G 的中国移动遇见云,移动云专题赛正式启动!
  2. 论文解读 | 微信看一看实时Look-alike推荐算法
  3. 经典不过时,回顾DeepCompression神经网络压缩
  4. 搬箱轮滑再炫技!一个被波士顿动力耽误的机器人
  5. Java 11 正式发布!
  6. AI一分钟 | 马斯克证实:特斯拉私有化的幕后推手是沙特主权基金;DeepMind的AI可以检测出超过50种眼疾...
  7. 专访施巍松:边缘计算早期提出者之一
  8. 这款IDEA插件刷爆了朋友圈,网友:这用起来有点酸爽~
  9. Spring为什么建议构造器注入?
  10. Linux内存、Swap、Cache、Buffer详细解析