调度请求在WSGI应用中。
WebDispatch的Python项目详细描述
网络调度
webdispatch是wsgi应用程序的调度程序集合。 它不依赖于现有框架,但可以与WebOb配合使用。
发送并生成url
使用url模式发送。
HELO应用示例:
>>> from webob.dec import wsgify >>> @wsgify ... def greeting(request): ... return "Hello, %s" % request.urlvars['name']
创建和配置URL分发程序:
>>> from webdispatch import URLDispatcher >>> dispatcher = URLDispatcher() >>> dispatcher.add_url('top', '/hello/{name}', greeting)
作为wsgi应用程序调用dispatcher:
>>> from webob import Request >>> req = Request.blank('/hello/webdispatch') >>> res = req.get_response(dispatcher) >>> res.body b'Hello, webdispatch'
通配符
可以在最后一个斜杠后使用通配符。 带通配符的模式使用通配符之前的路径(并使新脚本名为) 剩下的路径会变成新的路径信息。
>>> @wsgify ... def with_pathinfo(request): ... return "Hello, %s" % request.path_info >>> dispatcher.add_url('top', '/with_pathinfo/*', with_pathinfo) >>> req = Request.blank('/with_pathinfo/this/is/pathinfo') >>> res = req.get_response(dispatcher) >>> res.body b'Hello, this/is/pathinfo'
类型转换器
您可以在下面指定varname为“:”的转换器。
>>> @wsgify ... def add(request): ... result = request.urlvars['v1'] + request.urlvars['v2'] ... return "result, %d" % result >>> dispatcher.add_url('add', '/add/{v1:int}/{v2:int}', add) >>> req = Request.blank('/add/1/2') >>> res = req.get_response(dispatcher) >>> res.body b'result, 3'
默认转换器定义如下:
DEFAULT_CONVERTERS = { 'int': int, 'date': lambda s: datetime.strptime(s, '%Y-%m-%d'), 'date_ym': lambda s: datetime.strptime(s, '%Y-%m'), }
行动调度
actionDispatcher从urlvars调用操作名为的对象方法。
操作处理程序类:
>>> class MyHandler(object): ... @wsgify ... def greeting(self, request): ... return "Hello"
创建和配置ActionDispatcher:
>>> from webdispatch import ActionDispatcher >>> actiondispatcher = ActionDispatcher() >>> actiondispatcher.register_actionhandler(MyHandler)
添加名为action:
urlvars的操作url>>> dispatcher.add_url('action_dispatch', '/actions/{action}', actiondispatcher)
调用wsgi appclication.:
>>> req = Request.blank('/actions/greeting') >>> res = req.get_response(dispatcher) >>> res.body b'Hello'
方法调度
通过http方法restfully调度。
使用register_appdecorator:
>>> from webdispatch import MethodDispatcher >>> restapp = MethodDispatcher() >>> @restapp.register('get') ... @wsgify ... def get_hello(request): ... return "Get Hello" >>> @restapp.register('post') ... @wsgify ... def post_hello(request): ... return "Post Hello"
或者使用registe_app方法:
>>> from webdispatch import MethodDispatcher >>> restapp = MethodDispatcher() >>> restapp.register_app('get', get_hello) >>> restapp.register_app('post', post_hello)
每个应用程序都使用http方法名注册。
调用wsgi应用程序:
>>> req = Request.blank('/') >>> res = req.get_response(restapp) >>> res.body b'Get Hello'
额外环境
DispatchBase接受extra_environ参数。 dispatcher根据请求将该参数添加到wsgi环境中。
更改
1.3
- 添加了递减器API
1.2
- 向构造函数添加了额外的环境参数
- 放下python2.6测试
- 删除python2.6的依赖项
- 为url变量添加了类型转换器
1.1
- 向DispatchBase类添加了额外的环境方法
- 增加了对Python3.4的支持
1.0.1
- 包含“-”字符以匹配单词#9
1.0
- 无变化
1.0b4
- 将响应正文固定为字节
1.0b3
- 修复一些错误
1.0b2
- 修复安装程序错误