Pyramid中的request和response1.Request2.Multidict3.Response
官方API:pyramid.request、pyramid.response 和 pyramid.httpexceptions。
Pyramid中的request对象和response对象是基于WebOb包的(WebOb包是一个python库,对 WSGI 的request和response进行了封装)。 所以,传递给视图的request对象是
pyramid.request.Request
的一个实例,而pyramid.request.Request
是 webob.Request的子类。返回的response对象是pyramid.request.Response
的一个实例,而pyramid.request.Response
是 webob.Response的子类。
1.Request
request对象有很多属性(当然也可以包含你自定义的属性)。下面介绍一些比较重要的:
- request.method:request请求方式,比如POST,GET。
- request.GET:一个包含所有get请求数据的 multidict 字典,就是URL中的查询字符串。
- request.POST:一个包含request body的所有数据的 multidict 字典,必须是POST形式提交的表单。
- request.params:这货是request.GET和request.POST的结合。也是一个 multidict 字典。
- request.body:包含整个request的内容,当你不是以一个表单的形式发送POST请求时,或者发送一个PUT请求时,它会很有用的。
- request.json_body:看名字都知道,是json形式的request body。 JSON形式的request body。用来返回json形式的request body数据,如果request没有body或者body不是json形式的,就会抛出一个异常。
- request.cookies: 一个包含所有cookies的字典。
- request.headers: 一个包含所有headers的字典。
下面介绍request中与URL有关的一些属性,以http://localhost/app/blog?id=10
为例(假设应用安装在http://localhost/app
)
- request.url:获得整个url,如
http://localhost/app/blog?id=10。
- request.host:获得host信息,如localhost。
- request.host_url:host和url,如
http://localhost。
- request.application_url:应用的url,如
http://localhost/app。
- reqeust.path_url:完整路径,如
http://localhost/app/blog
- request.path:去掉host信息的路径,如/app/blog。
- req.path_qs:在request.path基础上加了查询字符串,如/app/blog?id=10。****
- req.query_string:查询字符串,如 id=10。
request还有一个属性charset,用来设定字符编码。比如你可以在实例化request对象时设定Request(environ,charset='utf-8')
.也可以指定req.charset='utf-8'
。如果你这样设定了,那么req.POST, req.GET, req.params, 还有req.cookies都会包含unicode字符串。每一个方法都有一个对应的获取str的方法,比如 req.str_POST,request.str_GET等等。
2.Multidict
multidict是一个特殊的字典,一个key可以对应多个值。
比如有这样一个查询字符串 ?pref=red&pref=blue;pref有red和blue两个值。当你用request.GET['pref']时会返回blue,它只返回最后的那个值。如果你想返回所有的值,用request.getall('pref')。Multidict就是元组的列表的一个视图,所有的键和值都会被排序好。
3.Response
一个response对象包含3个基本的部分:
- response.status:返回信息,比如'200 OK',如果你不想返回信息,而是想返回一个一个值,可以用status_int,比如response.status_int=200。
- response.headerlist:包含所有header信息的列表,就像 [('Content-Type', 'text/html')]这样。(你也可以用response.headers访问header)。
- response.app_iter:产生response内容的可迭代对象(比如list和generator生成器)。也可以用其他属性访问,只不过形式不一样,比如response.body(字符串),response.unicode_body(一个unicode对象), response.body_file(一个file-like对象)
其他属性还有:
- response.content_type:设置content type(不包括charset参数),比如:response.content_type ='text/html'。
- response.set_cookie(key, value, max_age=None, path='/', ...):设置cookie。
- response.delete_cookie(key, path='/', domain=None):删除cookie。
- response.cache_expires(seconds=0):设置缓存失效时间。
- response(environ, start_response): WSGI应用程序。
最后还有一个pyramid.httpexceptions模块,告诉Pyramid当你response产生异常时该返回什么。
- [接口测试 - 基础篇] 04 无法绕过的json解析
- 【专知-PyTorch手把手深度学习教程02】CNN快速理解与PyTorch实现: 图文+代码
- [接口测试 - 基础篇] 03 unittest测试框架了解多少才够?
- 关关的刷题日记09——Leetcode 80. Remove Duplicates from Sorted Array II
- [linux][kernel]dump kmsg到文件系统中
- [接口测试 - 基础篇] 12 还是要掌握python日志管理模块的
- Spring整合Quartz分布式调度
- [接口测试 - 基础篇] 11 掌握下python解析YAML格式也是需要的
- 如何用Python创建眼下火爆的区块链?这篇干货请收藏
- [接口测试 - 基础篇] 10 别啊,还有INI格式呢,别忘记我
- [接口测试 - 基础篇] 09 其实吧,读写csv格式也是要掌握的
- 【源码分享】机器学习之Python支持向量机
- [接口测试 - 基础篇] 08 封装个基本的excel解析类
- 关关的刷题日记10——Leetcode 1. Two Sum 方法1
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法