国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Python學(xué)習(xí)-編寫(xiě)一個(gè)簡(jiǎn)單的web框架(二)

2019-11-14 17:28:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在上一篇日志中已經(jīng)討論和實(shí)現(xiàn)了根據(jù)url執(zhí)行相應(yīng)應(yīng)用,在我閱讀了bottle.py官方文檔后,按照bottle的設(shè)計(jì)重寫(xiě)一遍,主要借鑒大牛們的設(shè)計(jì)思想。

一個(gè)bottle.py的簡(jiǎn)單實(shí)例

來(lái)看看bottle是如何使用的,代碼來(lái)自http://www.bottlepy.org/docs/0.12/index.html:

from bottle import route, run, template@route('/hello/<name>')def index(name):    return template('<b>Hello {{name}}</b>!', name=name)run(host='localhost', port=8080)

很顯然,bottle是使用裝飾器來(lái)路由的。根據(jù)bottle的設(shè)計(jì),我來(lái)寫(xiě)一個(gè)簡(jiǎn)單的框架。

Python裝飾器

裝飾器,顧名思義就是包裝一個(gè)函數(shù)。在不改變函數(shù)的同時(shí),動(dòng)態(tài)的給函數(shù)增加功能。這里不在探討更多的細(xì)節(jié)。

大致的框架

根據(jù)WSGI的定義,一個(gè)WSGI應(yīng)用必須要是可調(diào)用的。所以下面是一個(gè)WSGI應(yīng)用的大致框架:

class WSGIapp(object):    def __init__(self):        pass    def route(self,path=None):        pass        def __call__(self,environ,start_response):        return self.wsgi(environ,start_response)    def wsgi(self,environ,start_response):        pass

 其中,route方法就是來(lái)保存url->target的。這里為了方便,將url->target保存在字典中:

    def route(self,path=None):        def decorator(func):            self.routes[path] = func            return func        return decorator

這里return func注釋掉也可以,求大神解釋一下啊!!

然后就是實(shí)現(xiàn)WSGIapp的每個(gè)方法:

 class WSGIapp(object):    def __init__(self):        self.routes = {}    def route(self,path=None):        def decorator(func):            self.routes[path] = func            return func        return decorator        def __call__(self,environ,start_response):        PRint 'call'        return self.wsgi(environ,start_response)    def wsgi(self,environ,start_response):        path = environ['PATH_INFO']        print path        if path in self.routes:            status = '200 OK'            response_headers = [('Content-Type','text/plain')]            start_response(status,response_headers)            print self.routes[path]()            return self.routes[path]()        else:            status = '404 Not Found'            response_headers = [('Content-Type','text/plain')]            start_response(status,response_headers)            return '404 Not Found!'app = WSGIapp()@app.route('/')def index():    return ['This is index']@app.route('/hello')def hello():    return ['hello']from wsgiref.simple_server import make_serverhttpd = make_server('',8000,app)print 'start....'httpd.serve_forever()

這樣,一個(gè)簡(jiǎn)易的web框架的雛形就實(shí)現(xiàn)了,如果對(duì)裝飾器中的路徑加入正則表達(dá)式,那么就可以很輕松的應(yīng)對(duì)URL了。下一篇日志就是加入模板引擎jinja2了。

 


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 建宁县| 屏东市| 揭东县| 全州县| 乌鲁木齐县| 天长市| 宜城市| 无为县| 房山区| 上犹县| 和平县| 朝阳区| 马鞍山市| 布拖县| 呼玛县| 前郭尔| 鹿邑县| 陆良县| 剑川县| 天祝| 盐山县| 阳信县| 克山县| 泰州市| 武威市| 盐边县| 沂源县| 云林县| 灌云县| 德格县| 莱西市| 淳化县| 景宁| 高碑店市| 南陵县| 双辽市| 佳木斯市| 石景山区| 河东区| 凌云县| 富蕴县|