werkzeug的Request / Response 对象
来源:互联网 发布:生死狙击手游刷枪 软件 编辑:程序博客网 时间:2024/06/06 00:24
request 和response 对象是对WSGI环境或WSGI应用的返回值的包装,其本质也是一种WSGI应用。
工作原理
WSGI应用必须传入两个参数:WSGI环境和WSGI启动响应(start_response)函数.start_response函数常用于服务器响应客户端过程的起始阶段。Request类对程序环境进行封装,以便客户端更好地访问request变量(表格数据,request头文件等)。Response 是可供用户创建的一种标准的WSGI应用。基于Werkzeug的helllo world程序如下:
from werkzeug.wrappers import Responseapplication = Response('Hello World!')
进一步的写成如下的函数形式:
from werkzeug.wrappers import Request, Responsedef application(environ, start_response): request = Request(environ) response = Response("Hello %s!" % request.args.get('name', 'World!')) return response(environ, start_response)
进一步,改写成装饰器的形式如下:
from werkzeug.wrappers import Request, Response@Request.applicationdef application(request): return Response( "Hello %s!"%request.args.get('name', 'World!'))
对象的可变性和重用性
request 对象的性质:
1.request 是不可变对象。默认不支持修改。然而如果需要修改,可以用可变属性替代不可变属性。
2.request 对象可以在同一个线程中共享,但是其实不安全的。在多线程中使用,需要加锁来调用。
3.request 对象 不支持pickle 操作
response 对象性质:
1.response 是可变对象
2.response 对象可以进行pickle 操作和复制,但是必须首先执行 freeze()方法
3. Werkzeug 0.6之后,response 对象是线程安全的
4.response 对象支持深度复制(copy.deepcopy)
基类包装器
基类包装器定义了一组通用的操作,以插件的形式实现用户代理解析和etag处理。mixin类或 Request 和Response可以通过继承的方式使用这些特性.
源码文件werkzeug.wrappers.py,列出了所有的基类包装类。
class werkzeug.wrappers.BaseRequest( environ,populate_request=True, shallow=False)
BaseRequest是request对象的基类。其并没有实现诸如实体tag解析或缓存控制等功能。request对象创建了WSGI环境并将其作为第一个参数,在populate_request=True的条件下将其自身作werkzeug.request加入到WSGI环境当中去。request 对象中加入了mixins属性和一些附加的功能。源码中的Request类是BaseRequest 和一些重要的Minxin类的子类。
一个非常好的编程实践是,通过继承BaseRequest和一些Mixin类来实现定制的Request类。举例如下:
from werkzeug.wrappers import BaseRequest, ETagRequestMixinclass Request(BaseRequest, ETagRequestMixin): pass
request 对象默认编码方式是utf-8
class werkzeug.wrappers.BaseResponse( response=None,status=None, headers=None,mimetype=None, content_type=None, direct_passthrough=False)
reponse基类,最重要的是,一个response 对象就是一个标准的WSGI 应用。它接收到响应参数(报头,body,状态码)并初始化,之后启动WSGI响应并调用environ 开始响应客户端的请求。将实际的响应信息发送给服务器之前,WSGI应用通常会处理一些终端的信息。由于WSGI应用可以在响应客户端请求之前捕获异常,因此这一特性有利于debug程序。
一个简单的例子如下:
from werkzeug.wrappers import BaseResponse as Response def index(): return Response('Index page') def application(environ, start_response): path = environ.get('PATH_INFO') or '/' if path == '/': response = index() else: response = Response('Not Found', status=404) return response(environ, start_response)
reponse对象默认编码方式是utf-8
Mixin 类
Werkzeug 提供了mixins 类用于扩展HTTP的功能,例如etags,cache控制,用户代理等等。你可以继承特定的mixin类来扩展 BaseRequest 或BaseResponse。下边举一个简单的例子,用于解析接收的报头。
from werkzeug.wrappers import AcceptMixin, BaseRequestclass Request(BaseRequest, AcceptMixin): pass
- werkzeug的Request / Response 对象
- Request对象和Response对象的解析
- request和response对象的使用集合
- Servlet的request与response对象
- HttpServlet的response和request对象
- jsp的内置对象request和response
- request和response对象的周期过程
- Django 的request 和 response对象
- Request和Response对象
- Request和Response对象
- request和response对象
- request response对象
- Request、Response、Server对象
- Response & Request 对象
- Request Response对象
- Request和Response对象
- response、request对象
- Request和Response对象
- 实现view底部控件随着键盘的弹出而上移的效果
- MFC框架中对最近文件列表的支持
- 网易云音乐歌词python
- php undefined index:xxxxxxx 的解决方式
- OpenGL ES总结(四)OpenGL 渲染视频画面
- werkzeug的Request / Response 对象
- 关于idea的cannot resolve symbol情况和解决方法
- oracle_fdw的使用:从PostgreSQL中访问Oracle数据库,实现数据库数据的同步
- 用ASP.NET和C#连接数据库的几种方法
- ORB_SLAM2捋思路
- UVALive
- AngularJS系列(七)——HTML DOM操作
- 哈希表&哈希算法
- 1412的第一篇博客