简单说,Bottle 的使用就是将变量传递给脚本,不过这里的参数包是 URL 请求地址,我们要做的就是写一个脚本,可以将其解包接受参数,经对应回调函数运行后,返回值发送至浏览器。
只有一个文件
不依赖第三方扩展库
使用 Python 语言编写
符合 WSGI 规范
根据 URL 参数转发请求(映射),模板,key/value数据库
内置多种第三方 WSGI/HTTP 服务器适配器和模板引擎
是一种接口规范,用于服务器和客户端交互
不是服务器
不是 API
不是 Python 模块
不是框架(不像 Bottle)
在 WSGI 规范下,web 组件被分成三类:client, server, middleware.
WSGI apps(服从该规范的应用)能够被连接起来(be stacked)处理一个request,这也就引发了中间件这个概念,中间件同时实现c端和s端的接口,c看它是上游s,s看它是下游的c。
WSGI的s端所做的工作仅仅是接收请求,传给application(做处理),然后将结果response给middleware或client.除此以外的工作都交给中间件或者application来做。
路由(Routing):将请求映射到函数,可以创建十分优雅的 URL
模板(Templates):Pythonic 并且快速的 Python 内置模板引擎,同时还支持 mako, jinja2, cheetah 等第三方模板引擎
工具集(Utilites):快速的读取 form 数据,上传文件,访问 cookies,headers 或者其它 HTTP 相关的 metadata
服务器(Server):内置HTTP开发服务器,并且支持 paste, fapws3, bjoern, Google App Engine, Cherrypy 或者其它任何 WSGI HTTP 服务器
Python 版本要求 2.5+ 或 3.x。
在命令行中使用easy_install bottle
进行安装。
Bottle 被设计为仅仅只有一个文件,我们甚至可以不安装它,直接将 bottle.py 文件下载并复制到我们的应用中就可以使用了,即下载 bottle.py 到你工作目录下。
??????
如果我们直接将 bottle.py 下载到自己的应用中的话,我们可以建立下面这样的目录结构:
+application
+----bottle.py
+----app.py
将下面 Bottle 实例的示例代码复制到一个名为 app.py 文件中,在命令行输入 python app.py
运行该文件。
from bottle import route, run
@route('/')
def index():
return 'Hello World!'
run(host='localhost', port=8080)
访问 http://localhost:8080/,得到一个“Hello World!”页面。
我们将用控制行来创建一个十分简单但完整的 Bottle 应用程序。在 Python 控制台中逐行输入如下代码:
>>> from bottle import route, run
>>> @route('/hello/:name')
... def index(name = 'World'):
... return '<strong>Hello {}!'.format(name)
...
>>> run(host='localhost',port=8080)
Bottle server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Use Ctrl-C to quit.
在 Python Consle中输入上面的代码,我们就得到了一个最简单但完整的 Web 应用,
访问 http://localhost:8080/hello/World,会得到一个“Hello World!”页面。
也可以改成,访问 http://localhost:8080/hello/bottle,会得到一个“Hello bottle!”页面。
这里可以类比 Python 用 from sys import argv 传递参数的方式来理解。
首先,我们导入了两个 Bottle 的组件, route() 和 run() 函数
route() 可以将一个函数与一个 URL 进行绑定,在上面的示例中,route 将 “/hello/:name’ 这个URL地址绑定到了 “index(name = ‘World’)” 这个函数上
这个是一个关联到 “/hello” 的 handler function 或者 callback ,任何对 “/hello” 这个URL的请求都将被递交到这个函数中
我们获得请求后,index() 函数返回简单的字符串
最后,run() 函数启动服务器,并且我们设置它在 “localhost” 和 8080 端口上运行
将方法二创建的 Bottle 示例代码(如下所示)复制到一个名为 app1.py 文件中,在命令行输入 python app1.py
运行该文件。
from bottle import route, run
@route('/hello/:name')
def index(name = 'World'):
return '<strong>Hello {}!'.format(name)
run(host='localhost',port=8080)
同样,访问 http://localhost:8080/hello/World ,会得到与方法二一样结果。
我们也可以直接创建一个 Bottle 对象 app,将所有的函数都映射到 app 的 URL 地址上。 如上示例,我们可以用下面这种办法来实现:
将下面的 Bottle 示例代码复制到一个名为 app2.py 文件中,在命令行输入 python app2.py
运行该文件。
from bottle import Bottle, run
app = Bottle()
@app.route('/hello')
def hello():
return "Hello World!"
run(app, host='localhost', port=8080)
访问 http://localhost:8080/hello,得到一个“Hello World!”页面。