1.5.1 INTRODUCING FORMSDICT(介绍表格字典)
来源:互联网 发布:快乐宝拉 知乎 编辑:程序博客网 时间:2024/06/06 11:40
Bottle用一种特殊类型的字典来存储数据和cookie。
表格字典(FormsDict)用起来就像普通的字典那样,但是增加了一些新特性,能让你的开发变得简单。
属性使用:所有在字典中的值都能当做属性使用。这些虚拟的属性返回unicode字符串,即使该值根本不存在或是unicode转换失败~ 在这种情况下,返回空串:
name = request.cookies.name# is a shortcut for:name = request.cookies.getunicode('name') # encoding='utf-8' (default)# which basically does this:try: name = request.cookies.get('name', '').decode('utf-8')except UnicodeError: name = u''
每个键有多个值:FormsDict是MultiDict的子类,并且它每个键可以存储多个值。标准的字典只会返回单个值,但是表格字典的getall()方法返回一个指定键所对应所有值得列表(当然有可能是空的):
for choice in request.forms.getall('multiple_choice'): do_something(choice)WTForms(用来处理表单的Python库) 支持:一些库(比如 WTForms)要求字典中的输入全是unicode字符串。FormsDict.decode()方法就是干这个用的。它能解码所有的值并返回备份,它为每个键保存多个值并提供其余所有细节。
注意:
在 Python2 中所有的键和值都是字节字符串。如果你需要unicode,你可以调用FormsDict.getunicode() 或者分别处理每个属性。每个方法都尝试解码字符串(默认:utf-8),如果失败了,会返回空串。没必要接收UnicodeError异常:
>>> request.query['city']'G\xc3\xb6ttingen' # A utf8 byte string>>> request.query.cityu'Göttingen' # The same string as unicode
在Python3中所有的字符串都是unicode的,但是HTTP是基于字节的协议。服务器必须在数据传到应用前对字节字符串进行解码。在安全性方面,WSGi建议 ISO-8859-1 (即latin1),一个可逆的单字节编解码器能在稍后以不同方式编码。Bottle通过 FormsDict.getunicode()和属性访问做到了这些,但不是处理字典的方法。给服务器返回这些不可改变的值,你也许不喜欢这种方法。
>>> request.query['city']'Göttingen' # An utf8 string provisionally decoded as ISO-8859-1 by the server>>> request.query.city'Göttingen' # The same string correctly re-encoded as utf8 by bottle如果你需要从整个字典解码出需要的值(比方说WTForms),你可以用FormsDict.decode()方法得到一份再编码的备份。
0 0
- 1.5.1 INTRODUCING FORMSDICT(介绍表格字典)
- JSON 介绍(Introducing JSON)
- 1.1介绍线程和运行(Introducing Thread and Runnable)
- 1、Introducing Maven
- Introducing to Spring Framework (中文译稿1)
- Introducing Swift(Swift介绍及其API)
- Chapter 1(1): Introducing XNA
- Introducing Character Sets and Encodings(字符集与编码介绍)
- 介绍Starling框架的视频(Introducing the Starling Framework)
- iOS Framework: Introducing MKNetworkKit (MKNetworkKit介绍,入门,翻译)
- iOS Framework: Introducing MKNetworkKit (MKNetworkKit介绍,入门,翻译)
- iOS Framework: Introducing MKNetworkKit (MKNetworkKit介绍,入门,翻译)
- iOS Framework: Introducing MKNetworkKit (MKNetworkKit介绍,入门,翻译)
- c++标准容器类(表格介绍)
- Introducing the 4+1 view model
- Chapter 1 Introducing Windows Workflow Foundation
- Introducing the 4+1 view model
- Chapter 1 - Introducing .NET and C#
- Linux下的多进程编程初步(转载)
- sql 2008 远程过程调用失败 0x800706be
- Move Base 的配置文件分析
- 怪异模式的影响
- 判断undefined与事件绑定
- 1.5.1 INTRODUCING FORMSDICT(介绍表格字典)
- 【第七章】 对JDBC的支持 之 7.2 JDBC模板类 ——跟我学spring3
- 线性回归和批量梯度下降法python
- JS一些小技巧
- Java ClassLoader机制
- 面试题7:用两个栈实现队列+用两个队列实现栈
- Git远程操作详解
- 2016,在努力的路上~
- <LeetCode OJ> 112/113. Path Sum(I / II)