Bottle: Python Web Framework 学习笔记

一、简介

Bottle 是一个非常小巧但高效的微型 Python Web 框架,它被设计为仅仅只有一个文件的Python模块,

并且除Python标准库外,它不依赖于任何第三方模块。

  • 路由(Routing):将请求映射到函数,可以创建十分优雅、简洁的 URL;
  • 模板(Templates):快速的 Python 内置模板引擎,同时还支持 mako, jinja2, cheetah 等第三方模板引擎;
  • 工具集(Utilites):快速的读取 form 数据,上传文件,访问 cookies,headers 或者其它 HTTP相关的 metadata;
  • 服务器(Server):内置HTTP开发服务器,并且支持 paste, fapws3, bjoern, Google App Engine, Cherrypy 或者其它任何 WSGI HTTP 服务器;


二、安装Bottle

  • 正如上面所说的, Bottle 被设计为仅仅只有一个文件,我们甚至可以不安装它,直接将 bottle.py 文件下载并复制到我们的应用中就可以使用了,这是一个好办法,但是如果还是想将其安装,那么我们可以像安装其它的 Python 模块一样:
    sudo easy_install -U bottle
  • 如果我们直接将 bottle.py 下载到自己的应用中的话,我们可以建立下面这样的目录结构:
    + application
    +----bottle.py
    +----app.py


三、示例:Bottle 的 “Hello World”程序

<span style="font-family:SimSun;font-size:18px;">#/usr/bin/python

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)
</span>

运行该脚本文件(或者将该代码片paste into Python cinsole):

<span style="font-family:SimSun;font-size:18px;">$ python hello.py 
Bottle v0.13-dev server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.</span>

<span style="font-family:SimSun;font-size:18px;"></span>

然后在浏览器中运行: http://localhost:8080/hello/world



访问:“http://localhost:8080/hello/bottle”试试。上面到底发生了什么?

  1. 首先,我们导入了3个 Bottle 的组件,route() Decorator , Templete() 和 run() 函数
  • route()可以将一个函数与一个URL进行绑定,在上面的示例中,route 将 “/hello’ 这个URL地址绑定到了 “index(name)” 这个函数上
  1. 这个是一个关联到 “/hello” 的 handler function 或者 callback ,任何对 “/hello” 这个URL的请求都将被递交到这个函数中
  2. 我们获得请求后,index() 函数返回简单的字符串;
  • tempalte()被用用来作样式输出;
  • 最后,run()函数启动服务器,并且我们设置它在 “localhost” 和 8080 端口上运行;


2、上面的方法仅仅只是展示一下下 Bottle 的简单,我们还可以像下面这样,创建一个 Bottle 对象,对象命名为 App,

然后我们会将所有的函数都映射到 App 的 URL 地址上,如上示例我们可以用下面这种办法来实现:


<span style="font-family:SimSun;font-size:18px;">#/usr/bin/python

from bottle import Bottle,run,template

App = Bottle()
@App.route('/hello/<name>')
def index(name):
    return template('<b>Hello Object {{name}}</b>!',name=name)

run(App,host='localhost',port=8080)</span>



路由器(Request Routing):

Bottle 应用会有一个 URL 路由器,它将 URL 请求地址绑定到回调函数上,每请求一些 URL,其对应的 回调函数就会运行一些,而回调函数返回值将被发送到浏览器,你可以在你的应用中通过route() 函数添加不限数目的路由器

<span style="font-family:SimSun;font-size:18px;">from bottle import route

@route('/')

@route('/index.html')
def index():
    return '<a herf="/hello">Go to Hello World Page</a>'

@route('/hello')
def hello():
    return 'hello world'

run(host='localhost',port=8080)</span>

就像你看到,你所发出的访问请求(URL),应用并没有返回服务器上真实的文件,而是返回与该URL绑定的函数的返回值,

如果其一个URL没有被绑定到任何回调函数上,那么 Bottle 将返回“404 Page Not Found” 的错误页面!!!


动态路由(Dynamic Routes):

Bottle 有自己特有的 URL 语法,这让我们可以很轻松的在 URL 地址中加入通配符,这样,一个 route 将可以映射到无数的 URL 上,这些动态的路由常常被用来创建一些有规律性的内容页面的地址,比如博客文章地址“/archive/1234.html” 或者 “/wiki/Page_Title”:

eg:

@route(’/hello/:name’)
def hello(name = ‘World’): return ‘Hello {}!’.format(name)

上面的路由器,可以让我们通过“/hello/costony”或者“/hello/wangye”等地址来访问,而 Bottle 返回的内容将是“Hello costony!” 或者 “Hello wangye!”,“/hello/”之后的字符串被返回来,默认的通配符将匹配所有下一个“/”出现之前的字符。我们还可以对通配符进行格式化:


<span style="font-family:SimSun;font-size:18px;">@route('/wiki/<pagename>')
def show_wiki_page(pagename):
    return "<b>This is the :{}".format(pagename)</span>



HTTP 请求方法(Request Methods)

HTTP 协议为不同的需求定义了许多不同的请求方法,在 Bottle 中,GET方法将是所有未指明请求访问的路由会默认使用的方法,这些未指明方法的路由都将只接收 GET 请求,要处理如 POST, PUT 或者 DELETE 等等的其它请求,你必须主动地在route() 函数中添加 method 关键字,或者使用下面这些 decorators:get() , post() , put() , patch(),delete()

POST 方法在经常被用来处理 HTML 的表单数据,下面的示例演示了一个 登陆表单的处理过程:



















Reference:

http://bottlepy.org/docs/dev/tutorial.html#request-routing















猜你喜欢

转载自blog.csdn.net/wangyezi19930928/article/details/44587947
今日推荐