当前位置: 首页 > news >正文

python 利用装饰器实现类似于flask路由

例子1:

def f1():print(1111)def f2():print(2222)if __name__ == '__main__':print(33)

打印结果:

33

在例子1中,f1() 与f2() 都没有被调用,只执行了print(33)

f1与f2,是没有被调用的,但是如果f1 和 f2 上面有注解,就会被调用执行。

2、 python 利用装饰器实现类似于flask路由

注释类 Grass

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2023 - 02 -21
# @File: grass.pyfrom types import FunctionTypeclass Grass(object):# 字典,key 是 用户输入的路由# value,是调用对应的函数url_map = {}def router(self,url):def decorator(f: FunctionType):self.add_url_to_map(url,f)# return freturn decorator# f 指的是一个函数def add_url_to_map(self,url,f):self.url_map[url] = fdef run(self):while True:url = input("请输入URL: ")try:print(self.url_map[url]())except Exception as e:print(404)print(e)

运行入口

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2023 - 02 -21
# @File: blog.pyfrom grass import Grassapp = Grass()@app.router("/home")
def home():print("欢迎来到首页")return "首页"@app.router("/index")
def index():print("欢迎来到列表页")return "列表页"if __name__ == '__main__':app.run()

运行app.run()

然后输入 :

/home

/index

/mine

 

分析实现逻辑:

当运行app.run() 时,代码运行逻辑是

1、先执行1 实例化Grass对象

2、装饰器@app.router("/home") 运行

3、装饰器@app.router("/index") 运行

4、最后才是app.run() 运行

 

装饰器@app.router("/home") 运行逻辑

 

装饰器@app.router("/home"),运行

@app.router("/home") 对应 def router(self,url):

1、“/home” 传给 def router(self,url),url =“/home”

2、@app.router("/home"),运行得到 decorator函数

3、然后将home函数作为参数,传递给decorator函数

4、self.add_url_to_map(url,f)

将 url(“/home”) 与 home 函数组成 字典。

在字典中,字符串 /home 对应home 函数

 

相关文章:

python 利用装饰器实现类似于flask路由

例子1: def f1():print(1111)def f2():print(2222)if __name__ __main__:print(33)打印结果: 33 在例子1中,f1() 与f2() 都没有被调用,只执行了print(33) f1与f2,是没有被调用的,但是如果f1 和 f2 上面…...

git 拉取远程分支到本地

目录:***!本小作者,是将终端和Git的可视化插件结合使用,刚接触的可以自习看一下,内容简单,避免弯路!***一,简单了解远程分支1,连接远程:2,提交&am…...

Answering Multi-Dimensional Range Queries under Local Differential Privacy

文章目录AbstractIntroduction2 PRELIMINARIES2.12.2 Categorical Frequency Oracles4 GRID APPROACHES4.1概述Abstract 在本文中,我们解决了在局部差异隐私下回答多维范围查询的问题。有三个关键的技术挑战:捕捉属性之间的相关性,避免维度的…...

手把手搭建springboot项目05-springboot整合Redis及其业务场景

目录前言一、食用步骤1.1 安装步骤1.1.1 客户端安装1.2 添加依赖1.3 修改配置1.4 项目使用1.5 序列化二、应用场景2.1 缓存2.2.分布式锁2.2.1 redis实现2.2.2 使用Redisson 作为分布式锁2.3 全局ID、计数器、限流2.4 购物车2.5 消息队列 (List)2.6 点赞、签到、打卡 (Set)2.7 筛…...

Flutter基础语法(六)var、final、const、late

Flutter基础 第六章 Flutter关键字var、final、const、late的区别与使用 文章目录Flutter基础前言一、var1.var是什么?2.var如何使用3.var自动推断类型4.var可以再次赋值5.var指定类型二、final1.final是什么?2.final声明但不赋值3.final赋值多次4.final正常使用三、const1.…...

Linux之安装node

Linux之安装node步骤如下 1.去网站下载node 下载地址: https://npm.taobao.org/mirrors/ 2.上传到指定目录下 3.解压 tar -zxvf node-v17.3.0-linux-x644.配置node环境变量 //执行以下命令 vim /etc/profile //在path中加入以下内容 /usr/local/node-v15.14.0/b…...

二叉树、二叉搜索树、二叉树的最近祖先、二叉树的层序遍历【零神基础精讲】

来源0x3f:https://space.bilibili.com/206214 文章目录二叉树[104. 二叉树的最大深度](https://leetcode.cn/problems/maximum-depth-of-binary-tree/)[111. 二叉树的最小深度](https://leetcode.cn/problems/minimum-depth-of-binary-tree/)[129. 求根节点到叶节点…...

【算法】【数组与矩阵模块】求最长可整合子数组和子数组的长度

目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介绍 …...

数据结构:循环队列的实现(leetcode622.设计循环队列)

目录 一.循环队列简单介绍 二.用静态数组实现循环队列 1.数组循环队列结构设计 2.数组循环队列的堆区内存申请接口 3.数据出队和入队的接口实现 4.其他操作接口 5.数组循环队列的实现代码总览 三.静态单向循环链表实现循环队列 1.链表循环队列的结构设计 2.创建静…...

[qiankun]实战问题汇总

[qiankun]实战问题汇总ERROR SyntaxError: Cannot use import statement outside a module问题分析解决方案子应用命名问题问题分析解决方案jsonpFunction详细错误信息问题分析解决方案微应用的注册问题Uncaught Error: application cli5-beta6-test-name died in status LOADI…...

Kafka(6):服务端常用参数配置

参数配置:config/server.properties # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership.…...

2023爱分析·云原生智能运维中台市场厂商评估报告:秒云(miaoyun.io)

目录 1. 研究范围定义 2. 云原生智能运维中台市场定义 3. 厂商评估:秒云(miaoyun.io) 4. 入选证书 1. 研究范围定义 数字化时代,应用成为企业开展各项业务的落脚点。随着业务的快速发展,应用的功能迭代变得越…...

hadoop容器化部署

1、原容器 java:openjdk-8u111-jre jre路径: /usr/lib/jvm/java-8-openjdk-amd64 /usr/lib/jvm/java-1.8.0-openjdk-amd64 2、安装ssh docker run -it --name hadoop-test java:openjdk-8u111-jre bash apt-get update apt-get install openssh service ssh start …...

【07-JVM面试专题-JVM运行时数据区的虚拟机栈你知道吗?它的基本结构是什么呢?你知道栈帧的结构吗?那你说说动态链接吧?】

JVM运行时数据区的虚拟机栈你知道吗?它的基本结构是什么呢?你知道栈帧的结构吗?那你说说动态链接吧? JVM运行时数据区的虚拟机栈你知道吗?它的基本结构是什么呢?你知道栈帧的结构吗?那你说说动态…...

Java性能优化-GC优化基础

GC优化基础 调整堆大小 如果在FULL GC系统进行了交换,停顿时间会增长几个数量级,OS 如果G1 GC和后台进程处理堆,将会出现等待数据从磁盘复制到主内存时间较长,速度和下降并且并发模式可能失效 linux 关闭交换区 swapoff -a linu…...

【Tomcat】IDEA编译Tomcat源码-手把手教程

一、环境准备Tomcat不同版本之间有一定的兼容性问题~如下图所示:官网地址:https://tomcat.apache.org/whichversion.html下载tomcat9官网上面的源码:这一篇文章主要是带着大家在自己的IDEA跑起来一个Tomcat。使用的版本是Tomcat9.0.55 和 JDK…...

如何弄小程序?公司企业可以这样做小程序

公司企业现在对于小程序的需求已经是刚需了,即使已经有官网的情况下,也会考虑再弄一个小程序来做小程序官网。那么公司企业如何弄小程序呢?下面跟大家说说方法。 流程一、找小程序服务商 由于一些公司企业并不像现在的互联网公司企业那样有…...

【Git】IDEA集合Git和码云

目录 7、IDEA集合Git 7.1 配置Git忽略文件-IDEA特定文件 7.2 定位 Git 程序 7.3 初始化本地库 7.4 添加到暂存区 7.5 提交到本地库 7.6 切换版本 7.7 创建分支 7.8 切换分支 7.9 合并分支 7.10 解决冲突 8、 Idea集成码云 8.1 IDEA 安装码云插件 8.2 分析工程到码…...

[USACO03FALL / HAOI2006] 受欢迎的牛 G(C++,强连通分量)

题目背景 本题测试数据已修复。 题目描述 每头奶牛都梦想成为牛棚里的明星。被所有奶牛喜欢的奶牛就是一头明星奶牛。所有奶牛都是自恋狂,每头奶牛总是喜欢自己的。奶牛之间的“喜欢”是可以传递的——如果 AAA 喜欢 BBB,BBB 喜欢 CCC,那么…...

Vue 动态路由接口数据结构化为符合VueRouter的声明结构及菜单导航结构、动态路由懒加载方法

Vue 动态路由接口数据结构化为符合VueRouter的声明结构及菜单导航结构、动态路由懒加载方法 实现目标 项目打包代码实现按需分割路由懒加载按需打包,排除引入子组件的冗余打包(仅处理打包冗余现象,不影响生产部署)解决路由懒加载…...

SNMP V3安全配置实战:从零到企业级运维的完整指南(附华为/Cisco/Linux命令)

SNMP V3安全配置实战:从零到企业级运维的完整指南 金融行业的运维总监张伟最近遇到个头疼事:审计报告指出他们使用的SNMP V2c存在严重安全隐患。在连夜召开的紧急会议上,安全团队展示了用Wireshark抓取的明文社区字符串——攻击者完全可以利用…...

03-Open code MCP 与工具调用

03-MCP 与工具调用 掌握 OpenCode 中 MCP(Model Context Protocol)服务器的配置和使用,扩展 AI 的工具能力。 一、MCP 概述 1.1 什么是 MCP MCP(Model Context Protocol)是一种标准化协议,允许 AI 模型与…...

天地图性能优化实践:uniapp中用leaflet实现百万级点位渲染(附动态加载方案)

百万级点位地图渲染优化:uniappleaflet性能提升全方案 在移动应用开发中,地图功能已成为许多应用的核心组件。当面对海量点位数据时,传统渲染方式往往导致应用卡顿、内存飙升甚至崩溃。本文将深入探讨uniapp框架下结合leaflet地图库实现百万级…...

OpenClaw二次开发入门:Phi-3-mini-128k-instruct模型适配改造

OpenClaw二次开发入门:Phi-3-mini-128k-instruct模型适配改造 1. 为什么需要自定义模型适配 去年我在尝试用OpenClaw自动化处理技术文档时,发现官方支持的模型在长文本生成任务上表现不稳定。当时手头正好有Phi-3-mini-128k-instruct的部署实例&#x…...

OpenClaw多模态实践:千问3.5-27B图片理解+文件整理自动化

OpenClaw多模态实践:千问3.5-27B图片理解文件整理自动化 1. 为什么需要自动化图片管理 上周整理项目资料时,我发现桌面上散落着237张截图——有会议纪要片段、代码报错提示、参考文档关键页,甚至还有随手截的灵感草图。手动分类这些文件花了…...

腾讯云ICP备案:变更主体备案准备

腾讯云ICP备案:变更主体&备案准备一、变更主体适用场景已经成功办理备案的网站/APP,支持备案主体信息的变更申请。当备案主体信息发生变化时,建议及时办理备案变更,避免影响业务运行,可直接通过腾讯云备案控制台办…...

python python-telegram-bot

# 聊聊Python-Telegram-Bot:一个让机器人活起来的工具 如果你曾经用过Telegram,可能会注意到上面有各种各样的机器人,有的能帮你查天气,有的能管理群组,还有的甚至能陪你聊天。这些机器人背后,很多时候都是…...

短剧小程序三端互通:微信 / 抖音 / 快手数据同步,会员一键通用

短剧行业已进入全域流量、多端变现的时代。只做微信,公域起量慢;只做抖音快手,私域难沉淀、风控风险高。真正能长期盈利的玩家,都在布局三端互通—— 微信、抖音、快手小程序数据实时同步,会员权益一键通用&#xff0c…...

为什么ITK在医学影像分析中如此强大?深入解析其Pipeline设计原理

为什么ITK在医学影像分析中如此强大?深入解析其Pipeline设计原理 医学影像处理领域对计算效率和精度有着近乎苛刻的要求,而ITK(InsightToolkit)正是在这样的需求背景下成长为行业标杆的开源工具包。当我们需要处理CT扫描的数百层切…...

Vivado收费IP核怎么选?从以太网到视频接口,这份避坑指南帮你省下冤枉钱

Vivado收费IP核选型实战指南:从以太网到视频接口的避坑策略 在FPGA项目开发中,IP核的选择往往决定了整个项目的成败。面对Vivado中琳琅满目的收费IP核,工程师们常常陷入两难:既要确保功能完备,又要控制成本。本文将带你…...