上个教程我们已经简单地创建了一个web项目,在配置路由的时候route()函数有一个app参数我们并没有用到,它默认使用的是default_app()。但是我们的网站可能包含很多应用,如博客系统,投票系统,这个时候就要使用Bottle对象来创建多个app了。
1.创建一个app
from bottle import Bottle, run
root = Bottle()
@root.route('/hello')
def index():
return '<b>Hello World!</b>'
if __name__ == '__main__':
run(app=root, host='localhost', port=8080, debug=True)
- Bottle对象的成员:hook(钩子)
我的理解hook(钩子)就是在特定时间运行的函数。目前Bottle实现了三个hook它们分别是before_request、after_request、app_reset。before_request在每个请求之前执行一次,after_request在每个请求之后执行一次,app_reset每当调用Bottle.reset()时调用。
成员 | 描述 |
---|---|
add_hook(name, func) | 将函数附加到hook上。 |
remove_hook(name, func) | 删除已附加到hook上的函数 |
trigger_hook(_Bottle__name, *args, **kwargs) | 触发hook并返回结果列表。 |
hook(name) | 一个装饰器,可以将被装饰的函数附加到hook上。是装饰器版的add_hook()。 |
reset(route=None) | 重置所有路由并清除所有缓存。如果给定ID或route对象,则只影响该特定路由。 |
from bottle import Bottle, run
root = Bottle()
@root.hook("before_request")
def hook1():
print("hook1 has run before request")
@root.route('/hello')
def index():
return '<b>Hello World!</b>'
if __name__ == '__main__':
run(app=root, host='localhost', port=8080, debug=True)
- Bottle对象的成员:mount(prefix, app, **options)
功能是将应用程序挂载到特定的URL前缀。
参数:
- prefix:前缀path或挂载点。
- app:要挂载的app
来自父应用程序的插件不能应用于已挂载的子应用程序的路由。如果您需要子应用程序中的插件,请分别安装它们。
虽然可以在前缀path中使用路径通配符,但强烈建议不要使用。
如果您想通过/prefix和/prefix/访问子应用程序的根,请考虑添加一条重定向到父应用程序的307路由。
from bottle import Bottle
root = Bottle()
blog = Bottle()
root.mount('/blog', blog) # 将blog应用挂载到root中
@root.route('/hello')
def index():
return '<b>Hello World!</b>'
@blog.route('/hello')
def hello():
return '<b>Hello Blog!</b>'
if __name__ == '__main__':
root.run(host='localhost', port=8080, debug=True)
虽然配置了两个/hello,但这两个/hello实际的url是不同的
- Bottle对象的成员:merge(routes)
将另一个Bottle应用程序的路由或者将Route对象列表合并到此应用程序中。 - Bottle对象的成员:插件
成员 | 描述 |
---|---|
install(plugin) | 将插件添加到插件列表中,并准备将其应用于此应用程序的所有路由。插件可以是简单的装饰器,也可以是实现插件API的对象。 |
uninstall(plugin) | 卸载插件。传递一个实例来删除特定的插件,传递一个类型对象来删除与该类型匹配的所有插件,传递一个字符串来删除具有匹配name属性的所有插件,传递一个True来删除所有插件。返回已删除插件的列表。 |