跳转到主要内容

在WSGI应用上派发请求。

项目描述

WebDispatch

https://travis-ci.org/aodag/WebDispatch.svg?branch=master https://coveralls.io/repos/aodag/WebDispatch/badge.png?branch=master Wheel Status

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

上传时间: Python 2 Python 3

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面