编程语言
首页 > 编程语言> > bottle:python web框架学习

bottle:python web框架学习

作者:互联网

文章目录

下载和安装

打开pycharm,在terminal中输入 pip install bottle
支持python2.7 和python3
在这里插入图片描述

基础知识

Bottle是一个快速,简单,轻量级的 Python WSGI Web框架。单一文件,只依赖 Python标准库 。

服务器: 内置HTTP开发服务器并支持 paste, fapws3, bjoern, gae, cherrypy 或其他 WSGI 支持HTTP服务器。

第一个Hello world

在pycharm中新建一个python file,然后运行这个文件。
在浏览器中输入http://localhost:8080/hello/world

from bottle import route,run,template

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

run(host='localhost',port=8888)

原理解释

这个 route() decorator将一段代码绑定到URL路径。在本例中,我们将 /hello 路径到 hello() 功能。这叫@ route (因此是装饰名)是这个框架最重要的概念。您可以定义任意数量的路由。每当浏览器请求URL时,都会调用关联函数,并将返回值发送回浏览器。就这么简单。

最后一行调用的 run() 函数启动了内置的开发服务器
它监听 localhost 的8080端口并响应请求, Control-c 可将其关闭。

到目前为止,这个内置的开发服务器已经足够用于日常的开发测试了。它根本不需要安装,就可以让你的应用跑起来。在教程的后面,你将学会如何让你的应用跑在其他服务器上面(译者注:内置服务器不能满足生产环境的要求)【还是要学会将这个项目部署到其他的服务器上】

调试模式(Debug =1) 在早期开发的时候非常有用,但请务必记得,在生产环境中将其关闭。

第二个Helloworld

和第一个执行过程一样,在浏览器的地址栏中输入:http://localhost:8080/hello

from bottle import route, run

@route('/hello')
def hello():
    return "Hello World!"

run(host='localhost', port=8080, debug=True)

默认应用

基于简单性考虑,这份教程中的大部分例子都使用一个模块层面的 route() 修饰器函数来定义route。这样的话,所有route都添加到了一个全局的“默认应用”里面,即是在第一次调用 route() 函数时,创建的一个 Bottle 类的实例。其他几个模块层面的修饰器函数都与这个“默认应用”有关,如果你偏向于面向对象的做法且不介意多打点字,你可以创建一个独立的应用对象,这样就可避免使用全局范围的“默认应用”。

from bottle import Bottle, run

app = Bottle()

@app.route('/hello')
def hello():
    return "Hello World!"

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

URL映射

这个 route() decorator将URL路径链接到回调函数,并向 default application . 但是,只有一条路径的应用程序有点无聊。我们再加一点(别忘了 from bottle import template ):

@route('/')
@route('/hello/<name>')
def greet(name='Stranger'):
    return template('Hello {{name}}, how are you?', name=name)

说明:一个回调函数可以绑定多个route,你也可以在URL中添加通配符,然后在回调函数中使用他们。

动态的URL映射

包含通配符的route,我们称之为动态route(与之对应的是静态route),它能匹配多个URL地址。
一个通配符包含在一对尖括号里面(像这样 ),通配符之间用"/"分隔开来。例如,将URL定义为 /hello/ 这样,那么它就能匹配 /hello/alice 和 /hello/bob 这样的浏览器请求,但不能匹配 /hello , /hello/ 和 /hello/mr/smith 。

# URL中的通配符都会当作参数传给回调函数
# 直接在回调函数中使用。
# 这样可以漂亮地实现RESTful形式的URL。
# 例子如下:


@route('/wiki/<pagename>')            # matches /wiki/Learning_Python
def show_wiki_page(pagename):
    ...

@route('/<action>/<user>')            # matches /follow/defnull
def user_api(action, user):
    ...
已实现下面几种形式的过滤器,后续可能会继续添加:

:int 匹配一个数字,自动将其转换为int类型。
:float 与:int类似,用于浮点数。
:path 匹配一个路径(包含"/")
:re 匹配config部分的一个正则表达式,不更改被匹配到的值
@route('/object/<id:int>')
def callback(id):
    assert isinstance(id, int)

@route('/show/<name:re:[a-z]+>')
def callback(name):
    assert name.isalpha()

@route('/static/<path:path>')
def callback(path):
    return static_file(path, ...)

HTTP的请求处理

  1. HTTP 请求是通过Bottle对象的__call__方法完成的:

  2. HTTP 协议有很多种请求方法。route默认使用GET方法,只响应GET请求。method参数可以给route()函数指定使用哪种方法。或用get(),post(),put()或delete()等函数来代替route()函数。

特殊请求方法: HEAD 和 ANY

HEAD 方法类似于 GET 方法,但服务器不会返回 HTTP 响应正文,一般用于获取 HTTP 原数据而不用下载整个页面。

非标准的ANY方法做为一个低优先级的fallback:在没有其它route的时候,监听ANY方法的route会匹配所有请求,而不管请求的方法是什么。这对于用做代理的route很有用,可将所有请求都重定向给子应用。

总之:HEAD 请求被响应GET请求的route来处理,响应 ANY 请求的 route 处理所有请求,但仅限于没有其它 route 来匹配原先的请求的情况。

标签:web,请求,python,route,URL,bottle,hello,def,name
来源: https://blog.csdn.net/weixin_42521185/article/details/120807463