资源调度;一种使用 WSGI HTTP_METHOD 和属性访问来解析对 endopint 的请求的方法。
项目描述
© 2009-2019 Alice Bevan-McGregor 和贡献者。
介绍
调度是获取某个起点和路径,然后解析路径所指的对象的过程。这个过程几乎适用于所有 Web 应用程序框架(将 URL 转换为控制器)、RPC 系统,甚至文件系统 shell。此过程的其他术语包括:“遍历”、“路由”或“查找”。
资源调度利用 HTTP 动词(作为HTTP_METHOD WSGI 环境变量提供)来确定调用哪个方法。
这个包使用标准化的调度协议 ,并不完全供大多数开发人员直接使用。相反,目标受众是可能需要这种模块化调度以供他们自己的用户使用的框架的作者。
安装
安装web.dispatch.resource很简单,只需在终端中执行以下命令:
pip install web.dispatch.resource
注意:我们强烈建议在使用 Python 开发时始终使用某种容器、虚拟化或沙盒环境;在系统范围内安装东西很糟糕(出于各种原因)十有八九。我们更喜欢轻量级的virtualenv,其他人更喜欢像Vagrant这样健壮的解决方案。
如果您在应用程序的setup.py文件中将web.dispatch.resource添加到setup()调用的install_requires参数中,则该调度程序将在您自己的应用程序或库安装时自动安装并可用。我们建议使用“小于”版本号,以确保更新时没有意外的副作用。使用web.dispatch.resource<2.1获取当前版本的所有错误修正,使用web.dispatch.resource<3.0获取错误修正和功能更新,同时确保未安装大的重大更改。
开发版
开发在GitHub上的 web.dispatch.resource项目中进行。那里提供了问题跟踪、文档和下载。
安装当前的开发版本需要Git,一个分布式源代码管理系统。如果您有 Git,您可以运行以下命令来下载开发版本并将其链接到您的 Python 运行时:
git clone https://github.com/marrow/web.dispatch.resource.git pip install -e web.dispatch.resource
然后,您可以随时升级到最新版本:
cd web.dispatch.resource git pull pip install -U -e .
如果您想进行更改并将其贡献回项目,请分叉 GitHub 项目,进行更改并提交拉取请求。此过程超出了本文档的范围;有关更多信息,请参阅 GitHub 的文档。
用法
本节分为框架作者,他们需要将整个协议集成到他们的系统中,以及这种分派形式为最终用户提供的对象交互。
可调度对象
这种形式的调度依赖于一个对象,该对象的属性(以 HTTP 动词命名)是可调用的。通常,带有方法的类用于此目的。使用web.dispatch.resource:Resource帮助器类的基本示例是:
class Potato(Resource): def get(self): return "This is a marvellous potato."
这表示基于请求中的 HTTP 动词具有两个不同端点的资源(因此是名称)。到目前为止相当基本。然而,要定义资源集合,事情会变得有点复杂:
class Field(Collection): __resource__ = Potato potatoes = 10 def get(self): return str(self.potatoes) + " potatoes in the field." def post(self): Field.potatoes += 1 return "There are now " + str(Field.potatoes) + " potatoes in the field." def delete(self): Field.potatoes = 0 return "You monster." def __getitem__(self, index): try: index = int(index) except ValueError: raise KeyError() if index <= 0 or index > self.potatoes: raise KeyError() return index
这定义了一个资源(因为集合也是资源),上面有一些标准操作,加上这个奇怪的双下划线方法。这是一个标准的 Python 功能,可让您定义可以使用映射下标(如字典)访问类的实例。这就是资源调度从集合中查找单个项目的方式。
如果在__getitem__中引发KeyError ,则假定该标识符不存在。
此查找的结果(使用被调度的下一个路径元素)按位置传递给Collection子类的__resource__属性所指向的类的构造函数,就像对生成它的集合的引用一样。
我们现在可以更新我们的初始示例资源以作为集合的一部分:
class Potato(Resource): def get(self): return "One of " + str(self._collection.potatoes) + " beautiful potatoes." def delete(self): self._collection.potatoes -= 1 return "You monster."
对/的GET请求的文本结果将是字段中的 10 个土豆。 您可能可以推断出剩余的行为。
进一步下降
自定义动词可以定义为附加方法。任何名称不带下划线前缀的方法都被视为 HTTP 动词。最后,如果还有剩余的路径元素,并且 next 匹配值为类的属性,则该类将被实例化并作为调度的下一步生成。
版本历史
3.0 版
更新了最低 Python 版本。Marrow 包现在需要 Python 3.6 或更高版本。
删除了 Python 2 支持和特定于版本的代码。该项目已更新为现代 Python 打包标准,包括现代命名空间使用。现代命名空间与以前的命名空间机制完全不兼容;该项目不能与任何兼容 Python 2 的 Marrow 项目同时安装。
2.0 版
从 WebCore 中提取资源调度机制。
更新以利用标准化调度协议。
版本 1.x
流程完全集成在 WebCore Web 框架中,作为“RESTful 方言”。
执照
web.dispatch.resource 已在 MIT 开源许可下发布。
麻省理工学院许可证
版权所有 © 2009-2019 Alice Bevan-McGregor 和贡献者。
特此免费授予任何人获得本软件和相关文档文件(“软件”)的副本,以不受限制地处理本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售本软件的副本,并允许向其提供本软件的人这样做,但须符合以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。
本软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担任何责任,无论是在合同、侵权或其他方面,由本软件或本软件的使用或其他交易引起或与之相关。软件。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
web.dispatch.resource -3.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b7015f0e317060a0697806b9b77c286a92c5be2e1ee6c5a855883594f4a9f2e7 |
|
MD5 | 5496ac95d3d96de9ac20a20a94baf32e |
|
布莱克2-256 | ead7790629c05d309dec6ed5998ca6ed18feddea774d77f9751e5a6b315402c4 |
web.dispatch.resource -3.0.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3728cd55e345c4c2941d562951aaa6adf1512ba53132958fa2e67dc42306acdd |
|
MD5 | 8ff08f3ed16c5dd22d56e9bb21086c11 |
|
布莱克2-256 | 7c4a2c6832f229fb6529694f7aafe4635ed156315b22a56ee006963215591730 |