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的微型 ...
随机推荐
- SQL锁行 解决多台服务器发送统一请求并发问题
锁行信息SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 存储过程:SET Transaction Isolation Level Read语法的四种情 ...
- [Django_1_0]初次见面
Django 初次见面 文章将写安装和第一次使用时候的操作.文章是照着文档做的,但是以后的内容会有不一样. 安装 pip install django 我这里是使用python3的,也可以使用 pip ...
- IDEA打war包
一 第一步创建一个web application:expolded 选择当前项目 二 新建一个web application: Archive 选择刚刚新建的Expoded “For ‘...... ...
- 编写一个类A,该类创建的对象可以调用方法f输出小写的英文字母表。然 后再编写一个A类的子类B,要求子类B必须继承类A的方法f(不允许重写), 子类B创建的对象不仅可以调用方法f输出小写的英文字母表,而且可以调用子 类新增的方法g输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
package zimu; public class A { public void f() { for (int i = 97; i <123; i++) { System.out.print ...
- 在Quartus II中分配管脚的两种常用方法
在Quartus II中分配管脚的两种常用方法 示范程序 seg7_test.v 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /* * ...
- Dungeon Master bfs
time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u POJ 2251 Descriptio ...
- nancy的诊断2
接上文. 一 再看看第二个面板内容 点击带文号 的 Interactive Diagnostics 这个面板 如下 上面的是诊断程序,默认是系统提供的测试用的诊断程序. 你可以 通过实现IDiag ...
- bzoj 2957: 楼房重建 线段树
2957: 楼房重建 Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 小A的楼房外有一大片施 ...
- git学习笔记01-git最基本的工作原理分布式
git学习的网站 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 --廖雪峰老师 ...
- Java中枚举类型简单学习
/* * enum类型不允许继承 * 除了这一点,我们基本上可以将enum看作一个常规的类 * 我们可以添加自己的方法与属性,我们也可以覆盖其中的方法. * 不过一定要在enum实例序列的最后添加分号 ...