`
xxi
  • 浏览: 67027 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

python 简单web框架: Bottle文档

阅读更多

基本映射

映射使用在根据不同URLs请求来产生相对应的返回内容.Bottle使用route() 修饰器来实现映射.

1
2
3
4
5
from bottle import route, run
@route('/hello')
def hello():
    return "Hello World!"
run() # This starts the HTTP server

运行这个程序,访问http://localhost:8080/hello将会在浏览器里看到 "Hello World!".

GET, POST, HEAD, ...

这个映射装饰器有可选的关键字method默认是method='GET'. 还有可能是POST,PUT,DELETE,HEAD或者监听其他的HTTP请求方法.

1
2
3
4
5
6
from bottle import route, request
@route('/form/submit', method='POST')
def form_submit():
    form_data = request.POST
    do_something(form_data)
    return "Done"

动态映射

你可以提取URL的部分来建立动态变量名的映射.

1
2
3
@route('/hello/:name')
def hello(name):
    return "Hello %s!" % name

默认情况下, 一个:placeholder会一直匹配到下一个斜线.需要修改的话,可以把正则字符加入到#s之间:

1
2
3
@route('/get_object/:id#[0-9]+#')
def get(id):
    return "Object ID: %d" % int(id)

或者使用完整的正则匹配组来实现:

1
2
3
@route('/get_object/(?P<id>[0-9]+)')
def get(id):
    return "Object ID: %d" % int(id)

正如你看到的,URL参数仍然是字符串, 即使你正则里面是数字.你必须显式的进行类型强制转换.

@validate() 装饰器

Bottle 提供一个方便的装饰器validate() 来校验多个参数.它可以通过关键字和过滤器来对每一个URL参数进行处理然后返回请求.

1
2
3
4
5
6
from bottle import route, validate
# /test/validate/1/2.3/4,5,6,7
@route('/test/validate/:i/:f/:csv')
@validate(i=int, f=float, csv=lambda x: map(int, x.split(',')))
def validate_test(i, f, csv):
    return "Int: %d, Float:%f, List:%s" % (i, f, repr(csv))

你可能需要在校验参数失败时抛出ValueError.

返回文件流和JSON

WSGI规范不能处理文件对象或字符串.Bottle自动转换字符串类型为iter对象.下面的例子可以在Bottle下运行, 但是不能运行在纯WSGI环境下.

1
2
3
4
5
6
@route('/get_string')
def get_string():
    return "This is not a list of strings, but a single string"
@route('/file')
def get_file():
    return open('some/file.txt','r')

字典类型也是允许的.会转换成json格式,自动返回Content-Type: application/json.

1
2
3
@route('/api/status')
def api_status():
    return {'status':'online', 'servertime':time.time()}

你可以关闭这个特性:bottle.default_app().autojson = False

Cookies

Bottle是把cookie存储在request.COOKIES变量中.新建cookie的方法是response.set_cookie(name, value[, **params]). 它可以接受额外的参数,属于SimpleCookie的有有效参数.

1
2
from bottle import response
response.set_cookie('key','value', path='/', domain='example.com', secure=True, expires=+500, ...)

设置max-age属性(它不是个有效的Python参数名) 你可以在实例中修改 cookie.SimpleCookie inresponse.COOKIES.

1
2
3
from bottle import response
response.COOKIES['key'] = 'value'
response.COOKIES['key']['max-age'] = 500

模板

Bottle使用自带的小巧的模板.你可以使用调用template(template_name, **template_arguments)并返回结果.

1
2
3
@route('/hello/:name')
def hello(name):
    return template('hello_template', username=name)

这样就会加载hello_template.tpl,并提取URL:name到变量username,返回请求.

hello_template.tpl大致这样:

1
2
<h1>Hello {{username}}</h1>
<p>How are you?</p>

模板搜索路径

模板是根据bottle.TEMPLATE_PATH列表变量去搜索.默认路径包含['./%s.tpl', './views/%s.tpl'].

模板缓存

模板在编译后在内存中缓存.修改模板不会更新缓存,直到你清除缓存.调用bottle.TEMPLATES.clear().

模板语法

模板语法是围绕Python很薄的一层.主要目的就是确保正确的缩进块.下面是一些模板语法的列子:

  • %...Python代码开始.不必处理缩进问题.Bottle会为你做这些.
  • %end关闭一些语句%if ...,%for ...或者其他.关闭块是必须的.
  • {{...}}打印出Python语句的结果.
  • %include template_name optional_arguments包括其他模板.
  • 每一行返回为文本.

Example:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
%header = 'Test Template'
%items = [1,2,3,'fly']
%include http_header title=header, use_js=['jquery.js', 'default.js']
<h1>{{header.title()}}</h1>
<ul>
%for item in items:
  <li>
    %if isinstance(item, int):
      Zahl: {{item}}
    %else:
      %try:
        Other type: ({{type(item).__name__}}) {{repr(item)}}
      %except:
        Error: Item has no string representation.
      %end try-block (yes, you may add comments here)
    %end
    </li>
  %end
</ul>
%include http_footer

Key/Value数据库

Bottle(>0.4.6)通过bottle.db模块变量提供一个key/value数据库.你可以使用key或者属性来来存取一个数据库对象.调用 bottle.db.bucket_name.key_namebottle.db[bucket_name][key_name].

只要确保使用正确的名字就可以使用,而不管他们是否已经存在.

存储的对象类似dict字典, keys和values必须是字符串.不支持 items() and values()这些方法.找不到将会抛出KeyError.

持久化

对于请求,所有变化都是缓存在本地内存池中. 在请求结束时,自动保存已修改部分,以便下一次请求返回更新的值.数据存储在bottle.DB_PATH文件里.要确保文件能访问此文件.

Race conditions

一般来说不需要考虑锁问题,但是在多线程或者交叉环境里仍是个问题.你可以调用 bottle.db.save()或者botle.db.bucket_name.save()去刷新缓存,但是没有办法检测到其他环境对数据库的操作,直到调用bottle.db.save()或者离开当前请求.

Example

1
2
3
4
5
6
7
from bottle import route, db
@route('/db/counter')
def db_counter():
    if 'hits' not in db.counter:
        db.counter.hits = 0
    db['counter']['hits'] += 1
    return "Total hits: %d!" % db.counter.hits

使用WSGI和中间件

bottle.default_app()返回一个WSGI应用.如果喜欢WSGI中间件模块的话,你只需要声明bottle.run()去包装应用,而不是使用默认的.

1
2
3
4
from bottle import default_app, run
app = default_app()
newapp = YourMiddleware(app)
run(app=newapp)

默认default_app()工作

Bottle创建一个bottle.Bottle()对象和装饰器,调用bottle.run()运行. bottle.default_app()是默认.当然你可以创建自己的bottle.Bottle()实例.

1
2
3
4
5
6
from bottle import Bottle, run
mybottle = Bottle()
@mybottle.route('/')
def index():
  return 'default_app'
run(app=mybottle)

发布

Bottle默认使用wsgiref.SimpleServer发布.这个默认单线程服务器是用来早期开发和测试,但是后期可能会成为性能瓶颈.

有三种方法可以去修改:

  • 使用多线程的适配器
  • 负载多个Bottle实例应用
  • 或者两者

多线程服务器

最简单的方法是安装一个多线程和WSGI规范的HTTP服务器比如Pasteflupcherrypy or fapws3并使用相应的适配器.

1
2
from bottle import PasteServer, FlupServer, FapwsServer, CherryPyServer
bottle.run(server=PasteServer) # Example

如果缺少你喜欢的服务器和适配器,你可以手动修改HTTP服务器并设置bottle.default_app()来访问你的WSGI应用.

1
2
3
4
def run_custom_paste_server(self, host, port):
    myapp = bottle.default_app()
    from paste import httpserver
    httpserver.serve(myapp, host=host, port=port)

多服务器进程

一个Python程序只能使用一次一个CPU,即使有更多的CPU.关键是要利用CPU资源来负载平衡多个独立的Python程序.

单实例Bottle应用,你可以通过不同的端口来启动(localhost:8080, 8081, 8082, ...).高性能负载作为反向代理和远期每一个随机瓶进程的新要求,平衡器的行为,传播所有可用的支持与服务器实例的负载.这样,您就可以使用所有的CPU核心,甚至分散在不同的物理服

分享到:
评论

相关推荐

    python框架bottle使用文档

    Bottle是一个微型的Python Web框架,其设计思想非常独特:它只有一个文件模块,且不依赖于除Python标准库外的任何第三方模块...总体而言,Bottle文档提供了全面的指导,有助于开发者快速掌握并应用这个强大的Web框架。

    python bottle-docs

    Bottle是一个简单高效的遵循WSGI的微型python+Web框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。&oq=Bottle是一个简单高效的遵循WSGI的微型python+Web框架。说微型,是因为它...

    Bottle: Python Web Framework - Doc HTML(zip)

    《Bottle:Python轻量级Web框架离线文档解析》 Bottle,作为一个小巧而强大的Python Web框架,深受开发者喜爱。其核心理念是简洁、高效,使得开发人员能够快速构建Web应用,尤其适合小型项目。这份"Bottle: Python ...

    python bottle v0.11中文文档

    Bottle是一款针对Python设计的轻量级Web框架,它以其简洁性、高效性和低资源占用著称。这款框架非常适合小型项目或者需要快速原型开发的场景。Bottle的特点在于其单一文件的结构,仅依赖Python的标准库,使得它易于...

    Python-流行的pythonWeb开发框架的基准测试

    FastAPI是近年来新兴的高性能Web框架,基于Python 3.6+的类型提示,提供自动化的API文档和强大的依赖注入。FastAPI与Starlette库紧密集成,利用ASGI(Asynchronous Server Gateway Interface)实现高性能的异步处理...

    Python技术Web框架选择指南.docx

    Bottle是一个非常简单的Web框架,主要适用于小型项目或API服务。 **优点:** - **简单易用:** Bottle的设计极为简单,上手快。 - **部署方便:** 支持多种服务器,部署灵活。 **缺点:** - **功能有限:** 由于其...

    python小框架方便自己用

    总的来说,"Python小框架方便自己用"意味着我们可以利用Python的轻量级Web框架,结合标准项目模板,高效地开发个人项目。这些框架提供了基础功能,同时也允许我们根据需求选择扩展,从而实现定制化的解决方案。通过...

    python常见面试题集.docx

    1:Django 2:Twisted 3:Tornado 除了以上三种常用的开源框架外 还有 : Diesel、Flask、Cubes、Kartograph、Pulsar、Web2py、Falcon、DPark、Buildbot、Zerorpc、Bottle、webpy、Scrapy 3、python常用的web框架 ...

    bottle-docs

    Bottle是一个快速、简单且轻量级的Python WSGI 微型Web框架,它将所有功能封装在一个单独的文件模块中,除了Python标准库外没有其他依赖。它的设计理念追求简洁性,旨在提供一个最小的、但是功能完备的Web框架。 ...

    bottle开发文档

    Bottle是一款专为Python设计的快速、简洁且轻量级的WSGI微框架。它以单个文件模块的形式分发,除了Python标准库外无其他依赖,使得其在各种环境下都能轻松运行。本文将深入探讨Bottle的核心功能与用法,包括路由、...

    PyPI 官网下载 | bottle-0.11.6.tar.gz

    总结来说,通过PyPI官网下载的bottle-0.11.6.tar.gz,让我们有机会深入学习和使用Bottle这一优秀的Python Web框架。无论你是Python新手还是有经验的开发者,都能从中受益,实现高效、简洁的Web开发。

    pythonweb开发文档及案例

    首先,Django是Python的一个高级Web框架,它遵循MVC(模型-视图-控制器)设计模式,旨在简化Web应用的开发过程。Django实战系列.doc可能包含了一系列关于如何使用Django创建实际项目的文章或教程。这些内容可能包括...

    bottle web框架

    Bottle是一个为Python设计的快速、简单且轻量级的WSGI微型Web框架。它作为一个单文件模块发布,并且除了Python标准库之外没有其他依赖。 - **核心特性**: - **路由**:支持清洁且动态的URL映射到相应的函数调用。...

    Python Web基础入门

    4. **Web.py**:一个简单、强大的轻量级Python Web框架,易于学习和使用,适合初学者快速上手。 5. **Bottle**:类似于Flask,也是一个轻量级框架,特点是体积小、速度快、易于部署和使用。 通过以上介绍,我们可以...

    Python技术Web开发入门.docx

    Python的Web框架支持多种数据库,如MySQL、SQLite和PostgreSQL,便于管理应用程序数据。同时,它们还提供API构建工具,如Django REST framework和Flask-RESTful,方便创建RESTful服务。 安全性是Web开发不可或缺的...

    Python-TurboGears是一个混合Web框架既可以作为FullStack框架也可以作为Microframework

    **Python-TurboGears:混合型Web框架的探索** TurboGears是Python世界中一个独特的Web开发框架,它巧妙地结合了全栈(FullStack)和微框架(Microframework)的优势,为开发者提供了极大的灵活性和效率。TurboGears...

    Python 工具/类库中文文档

    Bottle Python Web 框架中文文档 Click 7.x 中文文档 Django 2.2 中文文档 Fabric 中文文档 Jupyter Notebook 6.0 中文文档 NetworkX 2.2 中文文档 NumPy 1.16 中文文档 OpenPyXL 2.6.1 中文文档 Peewee 3.9.2 中文...

    基于Bottle的Python网络应用开发.zip

    Bottle是一款轻量级的Python Web框架,它非常适合初学者和小型项目,因为它简单易用且功能齐全。在本文中,我们将深入探讨Bottle框架,理解其核心概念,并学习如何使用它来构建网络应用。 ### 1. Bottle框架简介 ...

    bottle文档PDF

    - **定义**:Bottle 是一个快速、简单且轻量级的 WSGI 微型 Web 框架,专为 Python 设计。 - **特点**: - **单文件模块**:作为一个单一的 Python 文件发布,无需额外依赖项(除了 Python 标准库)。 - **路由...

Global site tag (gtag.js) - Google Analytics