基於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 @app.route(r`^/test/?$`,[`GET`,`POST`])
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.py:https://github.com/webcpp/hi.py
這樣的話,上面程式碼的第1,2行就可以免了。
相關文章
- 基於hi-nginx的web開發(python篇)——utf-8編碼NginxWebPython
- 基於gin的golang web開發:路由GolangWeb路由
- 基於gin的golang web開發:路由二GolangWeb路由
- koa大型web專案中使用路由裝飾器Web路由
- python的裝飾器Python
- python裝飾器2:類裝飾器Python
- Python 裝飾器Python
- Python裝飾器Python
- python基礎學習12—-裝飾器Python
- 《Flask Web開發 基於Python的Web應用開發實戰》簡評FlaskWebPython
- Python中的裝飾器Python
- 我終於弄懂了Python的裝飾器(二)Python
- 我終於弄懂了Python的裝飾器(一)Python
- 我終於弄懂了Python的裝飾器(三)Python
- 關於 Python 裝飾器的一些理解Python
- python的裝飾器@的用法Python
- 基於Python+Django+Jquery架構的Web開發PythonDjangojQuery架構Web
- Python提高:關於閉包和裝飾器Python
- 1.5.3 Python裝飾器Python
- Python 裝飾器(一)Python
- Python 裝飾器原理Python
- Python裝飾器模式Python模式
- python中裝飾器的原理Python
- Python裝飾器的前世今生Python
- python基礎(補充):python三大器之裝飾器Python
- 測開之函式進階· 第7篇《裝飾器裝飾類,通用裝飾器,有啥區別呢?》函式
- 關於 Python 裝飾器的一些個人理解Python
- 《Flask Web開發:基於Python的Web應用開發實戰》學習筆記(二)FlaskWebPython筆記
- Python深入05 裝飾器Python
- python 之裝飾器(decorator)Python
- Python裝飾器詳解Python
- python幾種裝飾器的用法Python
- python中的裝飾器介紹Python
- 瞭解python的裝飾器特性Python
- Python 工匠:使用裝飾器的技巧Python
- python裝飾器decorator的應用Python
- python的裝飾器和閉包Python
- python類裝飾器的使用注意Python