python bottle 简介

  bottle是一个轻量级的python web框架, 可以适配各种web服务器,包括python自带的wsgiref(默认),gevent, cherrypy,gunicorn等等。bottle是单文件形式发布,源码在这里可以下载,代码量不多,可以用来学习web框架。这里也有官方文档的中文翻译。

  首先我们来运行一下bottle的hello world

from bottle import run

if __name__ == ‘__main__‘:
    def application(environ, start_response):
        start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])
        return [‘<h1>Hello world!</h1>‘]

    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 import run
import gevent.monkey
gevent.monkey.patch_all()

if __name__ == ‘__main__‘:
    def application(environ, start_response):
        start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])
        return [‘<h1>Hello world!</h1>‘]

    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

    def wsgi(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 flup Run as FastCGI process
gae gae Helper for Google App Engine deployments
wsgiref wsgiref Single-threaded default server
cherrypy cherrypy Multi-threaded and very stable
paste paste Multi-threaded, stable, tried and tested
rocket rocket Multi-threaded
waitress waitress Multi-threaded, poweres Pyramid
gunicorn gunicorn Pre-forked, partly written in C
eventlet eventlet Asynchronous framework with WSGI support.
gevent gevent Asynchronous (greenlets)
diesel diesel Asynchronous (greenlets)
fapws3 fapws3 Asynchronous (network side only), written in C
tornado tornado Asynchronous, powers some parts of Facebook
twisted twisted Asynchronous, well tested but... twisted
meinheld meinheld Asynchronous, partly written in C
bjoern 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

时间: 2024-12-14 18:17:07

python bottle 简介的相关文章

Python学习系列 (第一章):Python 的简介

一: Python 的简介: python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 二:Python的应用领域: web 开发: Django\pyramid\Tornado\Bottle\Flask\WebPy 网络编程: twisted\Requests\scrapy\paramiko 科学运算: Scipy\pandas\lpython GUI图形开

python bottle框架(WEB开发、运维开发)教程

教程目录 一:python基础(略,基础还是自己看书学吧) 二:bottle基础 python bottle web框架简介 python bottle 框架环境安装 python bottle 框架基础教程:路由(url定义) python bottle 框架基础教程:HTTP 请求方法 python bottle 框架基础教程:模板使用 python bottle 框架基础教程:模板语法 python bottle 框架基础教程:模板继承 python bottle 框架基础教程:静态资源

Python的简介与入门

Python的简介与入门 ·Python是一种结合了解释.性编译性.互动性和面向对象多种特性的脚本语言.对于编程初学者而言,Python易于阅读与学习,并且支持广泛的应用程序的开发与拥有支持多种平台的广泛的基础数据库. ·安装Python在Windows环境下  1.进入Python 官方网站:https://www.python.org/                 2.点击Downloads==> Downloads for Windows==> Python 3.6.2  3.下载安

以写代学:python 模块简介&输出用户指定位数密码的脚本

什么是模块 (1)模块是从逻辑上组织python代码的形式 (2)当代码量变的相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互 (3)这些代码段之间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数 (4)模块名不能乱起,字母数字下划线组成,首字母不能是数字 导入模块 (1)使用import导入模块,模块被导入后,程序会自动生成pyc的字节码文件以提升性能 (2)模块属性通过"模块名.属性"的方法调用,如果仅需要模块中的某些属性

python学习---简介

http://www.cnblogs.com/wuguanglei/p/3866583.html http://www.cnblogs.com/wuguanglei/p/3866583.html ok? python学习---简介

让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求

这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前端使用jquery ajax与接口进行交互,使用POST与GET请求时都正常,而Request Method使用PUT或DELETE请求时,直接爆“HTTP Error 405: Method Not Allowed”错误.而ajax提交的Request Method值DELETE也变成了OPTIONS了. 度娘了好多答案,要么说是浏览器不支持,要么说自己重新封装jquery,还有其他的一些方法...

Python的简介以及安装和第一个程序以及用法

Python的简介: 1.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Python已经成为最受欢迎的程序设计语言之一.2011年1月,它被TIOBE编程语言排行榜评为2010年度语言.自从2004年以后,python的使用率是呈线性增长. 2.Python在设计上坚持了清晰划一的风格,Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩

Python正则表达式简介

Python正则表达式简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 就其本质而言,正则表达式(或RE模块)是一种小型的,高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过re模块实现.正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行. 原文地址:https://www.cnblogs.com/yinzhengjie/p/8542361.html

Python 基础 —— 简介

Python 基础 简介 python的诞生 创建人: Guido van Rossum (荷兰人) 时 间: 1989年 python语言的应用领域: 系统运维 网络编程(搜索引擎,爬虫,服务器编程) 科学计算 人工智能,机器人 web 开发 云计算 大数据及数据库编程 教育 游戏,图像处理 其它... 优缺点: 优点 缺点 面向对象(Java, C++, Python, C#, Swift) 与 C/C++相比,执行速度不够快 免费 不能封闭源代码 可移植 (Windows, Linux,