Python开发者须知 —— Bottle框架常见的几个坑

Bottle是一个小巧实用的python框架,整个框架只有一个几十K的文件,但却包含了路径映射、模板、简单的数据库访问等web框架组件,而且语法简单,部署方便,很受python开发者的青睐。Python初学者可以好好的了解一下这个框架,但是也不得不提醒大家这个框架在使用中必须注意的一些事项。
unicode
作为非英文应用的开发者,unicode是一个绕不过去的坑。 web.py 对此是不作处理的,全都按原编码方式处理。 bottle 则作了一个有点奇怪的处理:
request.query 或 request.forms 都是一个 FormDict 类型,其特点是:当以属性方式访问数据时——如 request.query.foo,返回的结果是 unicode ,当以字典试访问数据时——如 request.query['foo'],则返回的结果是原编码字符串。混合使用的时候,一不小心就会出问题……
比如:大部分时候都用属性方式,但是某个数据需要有特定默认值的时候,就会习惯性地用字典方式操作: request.query.get("foo", "bar") ,这时就容易出编码错误。这种情况应该使用 request.query.getunicode() 函数。更彻底的方式是用 args=request.query.decode("utf-8") 然后 args.foo 或 args["foo"] 就都可以返回 unicode 了。至于在实际应用中,具体要用哪种方式来处理,就自己看情况选择了。
cookies
bottle 在这点上问题主要是出在 path 上,web.py 的 setcookie 函数参数选择很少,比如 path 就没有,默认只能存放于"/",虽然这算是一个小小的限制,但使用中基本不会有什么问题。但是bottle就坑了,它的 set_cookie 的默认 path 是当前路径,也就是说,在这个页面上存入的 cookie 在别的页面通常是取不到的,不熟悉这点的人几乎都要栽在这里。
而且更坑的是:set_cookie 有 path 参数可以指定 path ,但 get_cookie 却没有这个 path 参数可选——也就是说,你即使设置了其它 path ,如果 get_cookie 的时候不是刚好在那个 path 下的话,也取不到……那这个问题怎么破了,大家可以尝试,把所有的 cookie 都放到"/"下面,至少目前用下来感觉没问题。
除了上面这两个坑以外,还有一个不算坑,但是算是用户体验度不好的一点,就是:web.py 的 cookie 可以存放任何可持久化的数据,比如 dict/list 。但是 bottle 的 cookie 似乎只能放字符串,一放 list就 出错。对于这个问题,当然也不是不能解决,可以用一个 json.dumps/json.loads解决。
以上就是python bottle框架中,可能会常常遇到的几个小坑,不知大家有没有同样的感觉。虽然有一些坑,但是不可否认,这个框架还是很好用的,大家以后在使用中多注意一些便可。
推荐学习:《Bottle 框架》
Python开发者须知 —— Bottle框架常见的几个坑的更多相关文章
- python开发者框架套件总结: package 包 frameworks
python开发者的package 包 框架套件总结: frameworks 开发环境: anaconda pycharm django awesome-django : 介绍 django ...
- Python的Bottle框架中实现最基本的get和post的方法的教程
这篇文章主要介绍了Python的Bottle框架中实现最基本的get和post的方法的教程,Bottle框架在Python开发者中的人气很高,需要的朋友可以参考下 1.GET方式: # -*- cod ...
- 关于python的bottle框架跨域请求报错问题的处理
在用python的bottle框架开发时,前端使用ajax跨域访问时,js代码老是进入不了success,而是进入了error,而返回的状态却是200.url直接在浏览器访问也是正常的,浏览器按F12 ...
- python bottle框架
python bottle框架 简介: Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. Bottl ...
- Python自动化运维之29、Bottle框架
Bottle 官网:http://bottlepy.org/docs/dev/index.html Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除 ...
- python bottle框架(WEB开发、运维开发)教程
教程目录 一:python基础(略,基础还是自己看书学吧) 二:bottle基础 python bottle web框架简介 python bottle 框架环境安装 python bottle 框架 ...
- 让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求
这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前端使用jquery ajax与接口进行交互,使用POST与GET请求时都正常,而Request Meth ...
- python之Bottle框架
一.简单的Bottle框架 1)bottle框架简介 安装 pip install bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架. 此框架只由一个 .py 文件,除 ...
- Python之Bottle框架使用
本文主要包含的内容是Bottle框架介绍和安装使用. 一.Bottle框架介绍 Bottle是一个快速小巧,轻量级的 WSGI 微型 web 框架.同时Bottle也是一个简单高效的遵循WSGI的微型 ...
随机推荐
- Entity Framework 第七篇 简化排序
上篇介绍了EF的分页实现,分页的时候会用到排序,但是使用起来表达式写的似乎很繁琐 , ); 如果直接使用排序字符串,不更直观简便么? respository.GetPaged<S_Users&g ...
- 同一服务器部署多个tomcat时的端口号修改详情
同一服务器部署多个tomcat时,存在端口号冲突的问题,所以需要修改tomcat配置文件server.xml,以tomcat7为例. 首先了解下tomcat的几个主要端口: <Connector ...
- Android中直播视频技术探究之---基础知识大纲介绍
一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐方式,但是作为一个高技术的,我们除了看看,更 ...
- MVC api json 格式
输出json var formatters = config.Formatters.Where(formatter => formatter.SupportedMediaTypes.Where( ...
- reason: -[UIKBBlurredKeyView candidateList]: unrecognized selector sent to instance
reason: -[UIKBBlurredKeyView candidateList]: unrecognized selector sent to instance 发现上线的app一直会有这个cr ...
- js友好提示是否继续,post提交
<script type="text/javascript"> function delcheck(qId,typeid) { if (!confirm('确定删除吗? ...
- [Unity3D]开发视图中的标记 - Gizmos
这个类用来做自己的组件很不错,比如下面这个图的路径点,他其实是个Empty Object,可以自己加脚本让他带上标记.官方解释还可以用来做帮助提示的-.- 大游戏场景的制作时候,你可以用这个在地图上写 ...
- can not find UIAutomationClient
'ClientApp.vshost.exe' (CLR v4.0.30319: ClientApp.vshost.exe): Loaded 'C:\Windows\Microsoft.Net\asse ...
- Formatting Excel File Using Ole2 In Oracle Forms
Below is the some useful commands of Ole2 to format excel file in Oracle Forms.-- Change font size a ...
- django 的auth.authenticate返回为None
使用auth.authenticate(username= username,passowrd=passowrd),这个用户认证时候,明明数据库中有记录,但是返回就None 我的错误点比较多: 1.我 ...