码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-03-24 11:37:11      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:status   targe   style   ack   localhost   sel   路由   wrapper   regex   

现在,有了起步的基本认识,现在需要一个可以媲美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即可查看结果。

 

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

标签:status   targe   style   ack   localhost   sel   路由   wrapper   regex   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!