基于hi-nginx的web开发(python篇)——路由装饰器

现在,有了起步的基本认识,现在需要一个可以媲美flask或者bottle的简洁易用的路由功能,可以用装饰器写法任意映射 URLs 到代码。

这个,并不难。首先,来一个叫做hi的模块:hi.py:

 1 import re
 2
 3 class hi:
 4     def __init__(self):
 5         self.uri_map={}
 6         self.uri_regex_map={}
 7
 8     def route(self,pattern,method):
 9         def wrapper_a(func):
10             self.uri_map[pattern]={‘method‘:method,‘callback‘:func}
11             self.uri_regex_map[pattern]=re.compile(pattern)
12             def wrapper_b(req,res,param):
13                 func(req,res,param)
14                 return wrapper_b
15         return wrapper_a
16
17     def run(self,req,res):
18         for k,v in self.uri_map.items():
19             if req.method() in v[‘method‘]:
20                 m=self.uri_regex_map[k].match(req.uri())
21                 if m:
22                     v[‘callback‘](req,res,m.groupdict())
23                     break

把它和index.py放在同一个目录中。以下就是使用路由装饰器后的新代码:

 1 import sys
 2 sys.path.append(‘/usr/local/nginx/python‘)
 3
 4 from hi import hi
 5 app =hi()
 6
 7
 8 @app.route(r"^/$",[‘GET‘])
 9 def hello_world(req,res,param):
10     res.header(‘Content-Type‘,‘text/plain;charset=utf-8‘)
11     res.content(‘hello,world‘)
12     res.status(200)
13
14 @app.route(r"^/client/?$",[‘GET‘,‘POST‘])
15 def client(req,res,param):
16     res.content(‘{}<br>{}<br>{}<br>{}<br>{}‘.format(req.client(),req.method(),req.uri(),req.user_agent(),req.param()))
17     res.status(200)
18
19 @app.route(r"^/hello/(?P<who>\w+)?$",[‘GET‘])
20 def hello(req,res,param):
21     res.content(‘{}={}‘.format(‘who‘,param[‘who‘]))
22     res.status(200)
23
24
25
26 if __name__ == ‘__main__‘:
27     app.run(hi_req,hi_res)

是不是跟些flask或者bottle一样简单?而且还快得多喔!

访问http://localhost:8080/,http://localhost:8080/client?a=90,http://localhost:8080/hello/cnblogs即可查看结果。

原文地址:https://www.cnblogs.com/hi-nginx/p/8637705.html

时间: 2024-11-13 03:52:20

基于hi-nginx的web开发(python篇)——路由装饰器的相关文章

ZMAN的学习笔记之Python篇:装饰器

年前工作事务比较繁琐,我只能用零碎的时间继续学习Python,决定开一个系列的博文,作为自己深入学习Python的记录吧.名字也取好了,就叫<ZMAN的学习笔记之Python篇>~开篇是关于装饰器的,春节假期码的字哈哈~就让我们开始吧! 本文的例子都是自己想的,如果不是很合适,请大家提出宝贵意见哈~谢谢啦! 一.为什么要用“装饰器” 比如我们写了如下一段代码: # 打印0~99 def func(): for i in range(100): print(i) 我们想要监测执行这个函数花费了多

高性能WEB开发 - 图片篇

一.缩小图片大小 当图片很多的时候,减少图片大小是提高下载速度最直接的方法. 1. 使用PNG8代替GIF(非动画图片),因为PNG8在效果一样的情况,图片大小比GIF要小. 2. 用fireworks处理PNG图片,在我们产品中很多PNG图片是美工直接用photoshop导出的, 后来让美工用fireworks处理PNG(大概的方式是选择保存为PNG8,删除背景色). 处理后100K的图片大小基本减少了3/4,但图片质量也会有少许降低,要看自己是否能接受. 3. 使用Smush.it(http

Web开发中 前端路由 实现的几种方式和适用场景

浅析Web开发中前端路由实现的几种方式 主题 Web开发 故事从名叫Oliver的绿箭虾`说起,这位大虾酷爱社交网站,一天他打开了 Twitter ,从发过的tweets的选项卡一路切到followers选项卡,Oliver发现页面的内容变化了,URL也变化了,但为什么页面没有闪烁刷新呢?于是Oliver打开的网络监控器(没错,Oliver是个程序员),他惊讶地发现在切换选项卡时,只有几个XHR请求发生,但页面的URL却在对应着变化,这让Oliver不得不去思考这一机制的原因- 叙事体故事讲完,

如何理解python中的装饰器, 这篇文章就够了!

1. python中的函数 理解裝飾器之前先要理解閉包, python中閉包的出現是因爲函數在python中也是一個對象, 也可以被引用, 然後調用, 比如 def log(): print('我是一些log信息') if __name__ == '__main__': print(type(log)) log_func = log log_func() 執行結果如下 <class 'function'> 我是一些log信息 可以看到log函數是一個對象, 可以被賦值給log_func, lo

十、PYTHON 学习之装饰器加深理解

在第六章已经有所介绍,这里看到一篇比较好的文章转过来. 基本概念 装饰器是23z种设计模式之一,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理, Web权限校验, Cache等. 很有名的例子来理解,咖啡,加糖的咖啡,加牛奶的咖啡. 本质上,还是咖啡,只是在原有的东西上,做了"装饰",使之附加一些功能或特性. 例如记录日志,需要对某些函数进行记录 笨的办法,每个函数加入代码,如果代码变了,就悲催了 装饰器的办法,定义一个专门日志记录的装饰器,对需要的函数进行装饰.

python高级之装饰器

python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函数的定义: 满足下面两个条件之一的函数就是高阶函数: 接受一个或多个函数作为输入参数 输出一个函数 首先理解一个概念:函数名其实也是一个变量,一个函数其实就是一个对象,函数名就是对这个对象的引用.所以函数名也就和一个普通变量一样可以被当做函数的变量进行传递,当然也能够把函数名当做一个变量进行返回. 举个栗子: 1 def foo

Python何时执行装饰器

装饰器的一个关键特性是,它们在被装饰的函数定义之后立即运行.这 通常是在导入时(即 Python 加载模块时),如示例 7-2 中的 registration.py 模块所示. 示例 7-2 registration.py 模块 registry = [] def register(func): print('running register(%s)' % func) registry.append(func) return func @register def f1(): print('run

python学习笔记--装饰器

1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来不这么单调: def showInfo(fun): def wrap(x,y): print "The function before" func(x,y) print "The function after" return wrap def f(x,y): print

1.16 Python基础知识 - 装饰器

Python中的装饰器就是函数,作用就是包装其他函数,为他们起到修饰作用.在不修改源代码的情况下,为这些函数额外添加一些功能,像日志记录,性能测试等.一个函数可以使用多个装饰器,产生的结果与装饰器的位置顺序有关. 装饰器基本形式: @装饰器1 def 函数1: 函数体 相当于:==> 函数1 = 装饰器1(函数1) 装饰器特点: 1.不修改源代码的调用方式 2.不修改源代码内容 3.装饰器有高阶函数与递归函数相融合的特点 多个装饰器修饰,示例: @foo @spam def bar():pass