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

Posted hi-nginx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于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即可查看结果。

 

以上是关于基于hi-nginx的web开发(python篇)——路由装饰器的主要内容,如果未能解决你的问题,请参考以下文章

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

基于hi-nginx的web开发(python篇)——动态路由和请求方法

基于hi-nginx的web开发(python篇)——使用jinja2模板引擎

零基础学Python后端开发篇第二十节--Python Web开发一:Web开发简介

(转)openfire插件开发 基于web的插件开发

我的第三十三篇博客---flask