ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

bottle:python web框架学习

2021-10-17 10:58:19  阅读:254  来源: 互联网

标签:web 请求 python route URL bottle hello def name


文章目录

下载和安装

打开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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有