时间:2021-05-22
之前对bottle做过不少的介绍,也写过一些文章来说明bottle的缺点,最近发现其实之前有些地方说的不太公平,所以趁此机会也来更正一下。
bottle是支持类似flask url_for的语法的,具体使用方法在下文介绍
bottle的request.query之类的参数默认是str类型,也是有原因的,比如我在给google做代理的时候,编码就不一定是utf8的,如果强制转化utf8就会报错
之前的bug也得到了修正,比如mount(‘/x',app)之后,/x/和/x都可以访问到
OK,现在正式进入主题,我们来介绍一些bottle的一些高级使用
一. 智能创建url
这部分在bottle的文档上是没有介绍的(其实bottle明明实现了很多贴心的功能,不知道为啥都不写在文档上)。
在Bottle类里,有一个成员函数:
那么这个routename是哪里来的呢?看 route 装饰器的参数:
其中的name参数就是routename(这里不得不说一下,这种方式比flask要好些,要用才指定name,而不需要为了实现url_for,把整个框架都实现的很复杂)
所以看到这里大家也就明白了,bottle的url生成器是绑定在Bottle实例上的,所以跨实例访问默认是做不到的。
而可能由于bottle所推崇的micro化,所以其源码中特意对默认Bottle示例包装出了一个函数:
这样做的好处是,如果工程只用到默认的Bottle实例的话,在模板中就可以直接使用url,而不必再多传个Bottle实例进去。
更正一下,bottle的get_url是不能跨app调用的,比如被mount的app调用主app的get_url会错掉,因为此时的SCRIPT_NAME是当前页的path,所以拼装起来会乱掉,所以就不要尝试了。
但是怎么才能让模板能够访问到local变量呢?我们接下来介绍
二. 给模板指定默认的变量
因为笔者用的最多的是jinja2,所以模板相关的介绍都是以jinja2为例子.
由于bottle的很多实例都是使用的代理模式,如request,response,local,所以我们可以放心的将这些变量传入到模板默认变量里去。
代码也很简单:
有兴趣的话,大家也可以去直接看一下源码,很好懂
三. 给模板增加filters
还是以jinja2为例,直接给出代码如下:
OK,一共就是这些,这里基于的bottle版本是 0.10.9,如果有不相符的地方,请查看bottle版本。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
最近在阅读Python微型Web框架Bottle的源码,发现了Bottle中有一个既是装饰器类又是描述符的有趣实现。刚好这两个点是Python比较的难理解,又混
在用python的bottle框架开发时,前端使用ajax跨域访问时,js代码老是进入不了success,而是进入了error,而返回的状态却是200。url直
Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架,此框架只由一个.py文件,除了Python的标准库外,其不依赖任何其他模块。frombott
测了一下django、flask、bottle、tornado框架本身最简单的性能。对django的性能完全无语了。django、flask、bottle均使用
前言python作为一种脚本语言,已经逐渐大量用于web后台开发中,而基于python的web应用程序框架也越来越多,Bottle,Django,Flask等等