日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python bottle支持https_python bottle 简介

發布時間:2024/7/5 python 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python bottle支持https_python bottle 简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

bottle是一個輕量級的python

web框架, 可以適配各種

web服務器,包括python自帶的wsgiref(默認),gevent, cherrypy,gunicorn等等。bottle是單文件形式發布,源碼在

這里可以下載,代碼量不多,可以用來學習web框架。

這里也有官方文檔的中文翻譯。 ?   首先我們來運行一下bottle的hello world

from bottle importrunif __name__ == '__main__':defapplication(environ, start_response):

start_response('200 OK', [('Content-Type', 'text/html')])return ['

Hello world!

']

run(host='localhost', port=8080, app=application)

上面的代碼看起來也非常符合wsgi的接口規范。啟動改代碼,可以看到輸出 ? ? ? ??Bottle?v0.13-dev?server?starting?up?(using

WSGIRefServer())… ? ? ? ? Listening?on?http://localhost:8080/ ? ? ? ? Hit?Ctrl-C?to?quit. ??   輸出中加粗部分表明使用的web服務器是

python自帶的wsgiref。也可以使用其他web server,比如gevent,前提是需要安裝gevent,修改后的代碼如下:

from bottle importrunimportgevent.monkey

gevent.monkey.patch_all()if __name__ == '__main__':defapplication(environ, start_response):

start_response('200 OK', [('Content-Type', 'text/html')])return ['

Hello world!

']

run(host='localhost', port=8080, app=application, server = 'gevent')

通過server關鍵字指定web服務器為‘gevent’,輸出的第一行變成了:

Bottle?v0.13-dev?server?starting?up?(using

GeventServer())… ? 不管bottle用什么web服務器啟動,在瀏覽器輸入127.0.0.1:8080,都可以看到

? ? ? 下面介紹bottle中部分類和接口

bottle.Bottle ? ? 代表一個獨立的wsgi應用,由一下部分組成:routes,?callbacks,?plugins,?resources?and?configuration。 ? ? __call__: Bottle定義了__call__函數, 使得Bottle的實例能成為一個

callable。在

前文提到,web框架(或Application)需要提供一個callbale對象給web服務器,bottle提供的就是Bottle實例

def __call__(self, environ, start_response):"""Each instance of :class:'Bottle' is a WSGI application."""

return self.wsgi(environ, start_response)

下面是Bottle.wsgi函數的核心代碼,主要調用兩個比較重要的函數:_handle, _cast

defwsgi(self, environ, start_response):"""The bottle WSGI-interface."""

try:

out=self._cast(self._handle(environ))#rfc2616 section 4.3

if response._status_code in (100, 101, 204, 304)\or environ['REQUEST_METHOD'] == 'HEAD':if hasattr(out, 'close'): out.close()

out=[]

start_response(response._status_line, response.headerlist)return out

_handle:處理請求,最終調用到application?,簡化后的代碼如下:

1   def_handle(self, environ):2 self.trigger_hook('before_request')3 route, args =self.router.match(environ)4 out = route.call(**args)5 self.trigger_hook('after_request')6 return out

_cast:? ? ? ?  標準的wsgi接口對Application的返回值要求嚴格,必須迭代返回字符串。bottle做了一些擴展,可以允許App返回更加豐富的類型,比如dict,File等。?_cast函數對_handle函數返回值進行處理,使之符合wsgi規范

bottle.Route ? ? 封裝了路由規則與對應的回調

bottle.Router

A?Router?is?an?ordered?collection?of?route->target?pairs.?It?is?used?to? efficiently?match?WSGI?requests?against?a?number?of?routes?and?return?the?first?target?that?satisfies?the?request.

ServerAdapter ? ? 所有bottle適配的web服務器的基類,子類只要實現run方法就可以了,bottle里面有大量的Web服務器的適配。下表來自官網,介紹了bottle支持的各種web服務器,以及各自的特性。

Name

Homepage

Description

cgi

Run as CGI script

flup

Run as FastCGI process

gae

Helper for Google App Engine deployments

wsgiref

Single-threaded default server

cherrypy

Multi-threaded and very stable

paste

Multi-threaded, stable, tried and tested

rocket

Multi-threaded

waitress

Multi-threaded, poweres Pyramid

gunicorn

Pre-forked, partly written in C

eventlet

Asynchronous framework with WSGI support.

gevent

Asynchronous (greenlets)

diesel

Asynchronous (greenlets)

fapws3

Asynchronous (network side only), written in C

tornado

Asynchronous, powers some parts of Facebook

twisted

Asynchronous, well tested but… twisted

meinheld

Asynchronous, partly written in C

bjoern

Asynchronous, very fast and written in C

auto

Automatically selects an available server adapter

可以看到,bottle適配的web服務器很豐富。工作模式也很全面,有多線程的(如paste)、有多進程模式的(如gunicorn)、也有基于協程的(如gevent)。具體選擇哪種web服務器取決于應用的特性,比如是CPU bound還是IO bound

bottle.run ? ? 啟動wsgi服務器。幾個比較重要的參數 ? ? app: wsgi application,即可以是bottle.Bottle 也開始是任何滿足wsgi 接口的函數 ? ? server: wsgi http server,字符串 ? ? host:port: 監聽端口 ? ?? ? ? 核心邏輯: ? ? ServerAdapter.run(app)。 ? 最后,bottle源碼中有一些使用descriptor的例子,實現很巧妙,值得一讀,

前文也有介紹。 ? references;

http://www.bottlepy.org/docs/dev/

https://raw.githubusercontent.com/bottlepy/bottle/master/bottle.py

http://blog.csdn.net/huithe/article/details/8087645

http://simple-is-better.com/news/59

http://www.bottlepy.org/docs/dev/deployment.html#server-options

http://blog.rutwick.com/use-bottle-python-framework-with-google-app-engine

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的python bottle支持https_python bottle 简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。