在WSGI应用上派发请求。
项目描述
WebDispatch
WebDispatch是为WSGI应用提供的派发器集合。它不依赖于现有框架,但与WebOb配合使用效果良好。
派发和生成URL
通过URL模式进行派发。
示例hello应用
>>> 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应用调用派发器
>>> from webob import Request >>> req = Request.blank('/hello/webdispatch') >>> res = req.get_response(dispatcher) >>> res.body b'Hello, webdispatch'
通配符
您可以在最后一个斜杠之后使用通配符。具有通配符的模式消耗通配符之前的路径,(并创建新的script_name,) 剩余的路径成为新的path_info。
>>> @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'
类型转换器
您可以在“:”下面指定变量名下的转换器。
>>> @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的动作URL和urlvars
>>> dispatcher.add_url('action_dispatch', '/actions/{action}', actiondispatcher)
调用WSGI应用程序。
>>> req = Request.blank('/actions/greeting') >>> res = req.get_response(dispatcher) >>> res.body b'Hello'
方法派发
通过HTTP方法进行RESTful派发。
使用register_app装饰器
>>> 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'
extra_environ
DispatchBase接受extra_environ参数。派发器通过请求将此参数添加到WSGI环境。
变更
1.3
添加了装饰器API
1.2
将extra_environ参数添加到构造函数
删除了python2.6测试
删除了python2.6的依赖关系
为URL变量添加了类型转换器
1.1
向DispatchBase类添加了extra_environ方法
添加了对Python 3.4的支持
1.0.1
将“-”字符包含在urlmatch单词中 #9
1.0
没有变更
1.0b4
修复响应体为字节
1.0b3
修复一些错误
1.0b2
修复设置错误
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。
源分布
WebDispatch-1.3.tar.gz (10.4 kB 查看散列值)
构建分布
WebDispatch-1.3-py2.py3-none-any.whl (17.9 kB 查看散列值)