调度请求在WSGI应用中。

WebDispatch的Python项目详细描述


网络调度

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

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

  • 修复安装程序错误

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaSwing:如何读取组件下面的图形信息?   JAVAutil。scanner Java scanner为什么跳过代码中的nextLine()?   html如何在jsp文件中使用内联java比较器?   编组时单个元素组的java JAXB元素包装器   java如何使SeleniumWebDriver动态选择客户端证书,而无需直观地检测弹出窗口   java定位服务。FusedLocationApi。getLastLocation(mGoogleApiClient)获取null   java如何快速创建指向Eclipse中元素的Javadoc链接?   如何使用Java语言填充MS Word模板?   java 安卓应用程序不显示来自服务器的值   java有没有办法解决这个问题:第45行第7列path$处的预期名称。客户端[0]。服务   java如何使用ASM仅从switch中删除break语句?   java LOOK else if语句:我把它放在哪里   无效的Java语句   java输出不应包含0值   java遇到意外文本时要抛出什么异常?   java如何将文本文件数组中的数字添加到2d int数组中?   java如何从列表中的对象访问属性?   对象的oop锁方法(Java)   java字符串连接concat()和+运算符的有效使用