在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 查看散列值)