路由识别和生成工具
项目描述
Routes是Rails路由系统的Python重实现,用于将URL映射到控制器/操作并生成URL。Routes可以轻松创建简洁的URL,这些URL具有RESTful风格,几乎无需任何努力。
快速且动态的URL生成意味着您可以获得一个具有最小冗余(没有大的悬空查询参数)的URL。如命名路由等快捷功能可以减少重复输入。
请参阅Routes的安装和使用文档。
Routes变更日志
版本 2.5.1(2020年10月13日)
添加对Python 3.7+的兼容性。PR #99。
版本 2.5.0(2020年10月13日)
添加从请求对象中处理无效字符编码的优雅降级。由Phillip Baker修复。PR #94。
增强匹配具有相同静态前缀的路由的性能。由George Sakkis修复。PR #89。
修复了子路由未将路由条件传递给Mapper.connect调用的问题。由Robin Abbi补丁。PR #88。
修复了文档以反映最小化默认值。由Marcin Raczyński补丁。PR #86。
允许在路由路径中通过反斜杠转义特殊字符。由Orhan Kavrakoğlu补丁。PR #83。
解决无效转义序列。由Stephen Finucane补丁。PR #85。
移除对Python 2.6、3.3和3.4的支持。由Stephen Finucane补丁。PR #85。
移除过时的Python 2.3兼容代码。由Jakub Wilk补丁。PR #80。
发布2.4.1版本(2017年1月1日)
以通用wheel形式发布。PR #75。
将readthedocs链接转换为他们的.org -> .io迁移以托管项目。PR #67。
发布2.3.1版本(2016年3月30日)
向后兼容修复 - connect应该与强制路由名和可选路径一起工作。由Davanum Srinivas补丁(PR #65)。
发布2.3版本(2016年3月28日)
修复了sub_domain等价性检查。由Nikita Uvarov补丁
添加了对生成协议相关URL的支持(即以双斜杠//开头)。PR #60。由Sviatoslav Sydorenko补丁。
添加了对middleware额外要求的支持,使得可以可选地依赖于webob。PR #59。由Sviatoslav Sydorenko补丁。
修复了匹配空字符串路由的问题,这导致早期版本中抛出异常。PR #58。由Sviatoslav Sydorenko补丁。
当使用mapper.resource创建路由时,添加了对requirements选项的支持。PR #57。由Sean Dague补丁。
修复了使用具有路径前缀的子映射器时的连接问题。多个子映射器以不明显的方式组合控制器参数中的路径前缀。现在使用子映射器时,控制器参数将被正确传递。PR #28。
发布2.2版本(2015年7月21日)
修复了Python 3支持。由Victor Stinner补丁。
发布2.1版本(2015年1月17日)
修复了route.py中3个其他路由匹配组的问题,以使用匿名组来避免超过正则表达式限制。修复了#15。
打印mapper现在包括来自路由的Controller/操作参数。修复了#11。
修复了不允许传递params 'host'、'protocol'或'anchor'的回归问题。现在可以通过在末尾添加'_'来传递,就像在提交d1d1742903fa5ca24ef848a6ae895303f2661b2a之前一样。修复了#7。
使用/不使用SCRIPT_NAME生成URL时,URL缓存失败返回适当的缓存URL生成。为了避免这种情况,URL缓存现在始终包含SCRIPT_NAME,即使它是空的。修复了#6。
将Route创建提取到Mapper中的单独方法。现在Mapper可以创建Route的子类。
如果有多个代理在路径中,则使用第一个X_FORWARDED_FOR值。修复了#5。
发布2.0版本(2013年11月17日)
Python 3.2/3.3支持。修复了Issue #2。感谢Alejandro Sánchez的pull request!
发布1.13版本(2012年3月12日)
修复了点强制扩展为默认值时的bug。现在可以识别带有点的部分。由Michael Basnight补丁。
发布1.12.3版本(2010年6月5日)
修复了URLGenerator在生成URL时未正确包含SCRIPT_NAME的bug,当单例不存在时。
发布1.12.2版本(2010年5月5日)
修复了routes URLGenerator在生成合格URL时未正确包含SCRIPT_NAME的bug。
发布1.12.1版本(2010年3月11日)
修复了routes在默认值中包含可调用项时未生成URL的bug。
修复了routes在生成时未处理子域默认值的bug。
发布1.12版本(2010年2月28日)
拆分Routes文档。
修复了相对URL使用合格合并主机和URL时未包含适当斜杠的bug。修复了#13。
修复了mapper.extend和Routes修改其原始参数的bug。修复了#24。
修复了url.current()在explicit为True时未返回当前参数的bug。
添加了一种直接使用Mapper与environ匹配的显式方式。
修复了submapper的len放置不当的bug。
为整个正则表达式添加正则表达式构建器,以便在没有匹配任何路由的情况下更快速地拒绝单个正则表达式匹配。
为Mapper提供一个表格字符串表示形式。
使SubMapper对象可嵌套,并添加路由生成助手。
添加基于SubMapper的集合。
默认将弃用的Mapper.minimization设置为False(禁用)。
默认使mapper明确(true)。
发布1.11(2009年9月28日)
广泛的文档重写。
添加了Mapper.extend函数,允许用户一次性将Routes对象列表添加到mapper中,可选地带有path_prefix。
添加了Mapper.submapper函数,返回一个SubMapper对象,以使具有多个共同关键字参数选项的路由声明更容易。
Mapper controller_scan参数现在处理None,以及可调用的控制器名称列表。
Route对象现在接受一个名称参数,这是它响应的名称。在通过Mapper的connect类方法调用时,此名称将自动添加。
添加了可选的LRU对象,用于在URL更改过于频繁而使Routes urlcache dict成为可行选项时使用。
发布1.10.3(2009年2月8日)
调整以使用WebOb请求而不是Paste。
对URL识别进行性能调整。
修复了routes.middleware在将path_info移动到脚本名之前未重新转义的问题。
发布1.10.2(2009年1月11日)
修复了非最小化Route生成中的Unicode编码问题。由Wichert Akkerman发现。
修复了单元测试中environ为{}时的错误。
发布1.10.1(2008年9月27日)
由于性能和线程问题,删除LRU缓存。缓存对于给定路由会达到最大大小。
发布1.10(2008年9月24日)
添加LRU缓存,而不是仅为缓存生成的路由使用dict。这避免了长时间运行和不存在路由生成时的缓慢内存泄漏。
添加URLGenerator对象。
添加重定向路由。
静态路由现在可以在使用{}变量部分语法时在路径中插值变量部分。
添加sub_domain条件选项,以接受False或None,要求对于路由匹配不允许提供子域。
发布1.9.2(2008年7月8日)
修复了url_for中的错误,导致它在不应该返回文本时返回文本。
发布1.9.1(2008年6月28日)
修复了格式化路由识别中的错误,格式化被吸收到id中。
发布1.9(2008年6月12日)
修复了url_for中的未定义参数错误。
修复了url_for在活动子域外不正确工作的错误。感谢Pavel Skvazh。
为Routes和Mapper添加非最小化选项以进行生成和识别。
添加Routes 2.0风格语法来创建路由和正则表达式。例如,此路由现在将正常工作:“{controller}/{action}/{id}”。
修复了Routes在创建URL时不使用quote_plus的问题。
警告:Mapper现在默认将hardcode_names设置为True。这意味着按名称生成的路由必须适用于URL。
实际上尊重禁用了urlcache。
警告:当使用返回None的参数集调用url_for时现在会抛出异常。必须相应地更新之前检查是否可以创建URL的代码。
更新url_for以返回用于模板的URL,该模板可能会再次尝试转义它。
添加使用X_FORWARDED_PROTO进行代理的选项,以便在https后更容易工作。
修复了map.resource,使其对id的限制比仅空格更少。
修复了Mapper.create_regs在always_scan=True时不是线程安全的问题。
发布1.8(2008年3月28日)
修复了map.resource不允许id中包含空格的错误。
修复了url生成,以正确处理Unicode默认值以及Unicode参数。
修复了url_for在生成查询参数时处理关键字参数列表的问题。
警告:已将 map.resource 中的 ‘;’ 改为不使用,用于操作,但正常使用 ‘/’。这意味着格式化的 URL 现在也将格式放在操作之后。例如:/messages/4.xml;rss -> /messages/4/rss.xml
版本 1.7.3(2008年5月28日)
修复了三重转义错误,因为 WSGI 服务器负责基本的反转义。
版本 1.7.2(2008年2月27日)
修复了关键字参数未正确转换为原始字符串的错误。
版本 1.7.1(2007年11月16日)
修复了由于路由默认值中的子域名编码为 Unicode 导致的 Unicode 路由错误,进而导致 url_for 抛出异常。
移除了 map.resource 中的重复赋值。由 Mike Naberezny 提交的补丁。
应用了测试补丁以修复路径检查。感谢 Mike Naberezny。
添加了对剩余 URL 的额外检查,以正确处理适当上下文中的点号。修复了 #57。
添加了 mapper.hardcode_names 选项,该选项限制在生成过程中将 URL 生成限制为命名路由,而不是在生成过程中使用路由默认选项。
修复了在 POST 请求中,当 Content-Type 为 ‘multipart/form-data’ 时,无法识别特殊 ‘_method’ 属性的错误。
版本 1.7(2007年6月8日)
修复了 url_unquoting 仅适用于字符串。
为单个路由添加了 _encoding 选项,以切换每个路由的解码/编码。
修复了路由匹配,使得 ‘.’ 和其他特殊字符只有在它们后面不是该字符时才算是匹配的一部分。修复了正则表达式创建,使得包含 ‘.’ 的路由部分不会被正确匹配。修复了 #48。
修复了 Unicode 解码/编码,使得 URL 解码和编码可以通过 mapper.encoding 在映射器上进行设置。修复了 #40。
不要假设 environ[‘CONTENT_TYPE’] 总是存在:它可能根据 WSGI PEP 被省略。
修复了 path_info 动态/通配符部分的 Unicode 解码/编码,以便 PATH_INFO 保持为原始字符串。修复了 #51。
修复了 url_for(因此 redirect_to)在返回 Unicode 字符串时抛出异常,因为这是无效的 URL。修复了 #46。
修复了 Routes 中间件,使其仅在 HTML 表单的内容类型为 application/x-www-form-urlencoded 时解析 POST,这正确地避免了在不需要时解析 wsgi.input。
版本 1.6.3(2007年4月10日)
修复了尝试匹配空路径时引发 RouteException 的问题。修复了 #44。
添加了在 map.resource 中使用 URL 中的字符(如 ‘-’ 和 ‘_’)的能力。由 Wyatt Baldwin 提交的补丁。修复了 #45。
更新了 Mapper.resource 的处理,使用 name_prefix 和 path_prefix 检查以指定默认值。还确保如果设置了其中任何一个,则它们将覆盖父资源指定的前缀。由 Wyatt Baldwin 提交的补丁。修复了 #42。
添加了对传入路径参数的 utf-8 解码,对于非常罕见的错误请求 URL 会导致忽略它们。由 David Smith 提交的补丁。
修复了将 ‘#’ 字符视为可以省略并在路由路径中使用的问题。由 Mike Orr 发现。
在 map.resource 命令中添加了指定父资源的能力。由 Wyatt Baldwin 提交的补丁。
修复了在指定了额外收集方法时 map.resource 的格式化路由问题。添加了单元测试以验证收集方法是否正常工作。
更新了 URL 解析,以便在回退到 SERVER_PORT 和 SERVER_NAME 之前正确使用 HTTP_HOST 获取主机加端口号信息。修复了 #43。
在用 map.resource 创建时,将 member_name 和 collection_name 设置添加到 Route 对象。
更新了 routes.middleware,使得匹配的路由可通过 environ[‘routes.route’] 访问。
更新映射器对象以使用线程本地请求数据(如 environ),中间件现在在请求结束时删除 environ 引用。
为 Routes 和 Mapper 添加了显式选项。Routes _explicit 设置将阻止隐式设置路由默认值,而将 Mapper 设置为显式将阻止路由隐式默认值并阻止 url_for 使用路由内存。修复了 #38。
更新了配置对象,以便如果可能,则附加路由。
添加了标准日志记录用法,包括调试消息。
增加了对普通‘.’匹配的额外测试,并修复了新特殊匹配以正确匹配。感谢David Smith。
修复了URL末尾缺少变量的特殊URL字符导致的挂起特殊字符问题。
更改了路由生成和识别,以处理其他特殊URL字符,如.和;,就像它们是/一样。这使得它们可以在生成的结果URL中可选地省略。这是David Smith请求的功能。
修复了正则表达式构建器中的前瞻断言,以正确处理连续的两个分组模式。
应用补丁以正确处理Unicode字符。由David Smith报告并提交补丁。
版本1.6.2(2007年1月5日)
修复了方法检查未正确处理REQUEST_METHOD中不同字母大小写的问题。由Sean Davis报告。
redirect_to现在支持config.redirect返回重定向,而不仅仅是抛出重定向。
版本1.6.1(2006年12月29日)
将zipsafe标志设置为False。
版本1.6(2006年12月14日)
修复了append_slash在路由生成本身中生效,而不是依赖于url_for函数的问题。由ToddG报告。
添加了额外的url_for测试,以确保map.resource生成正确的命名路由。
警告:已更改map.resource的初始化以接受单个成员和集合名称以生成正确的单数和复数路由名称。使用map.resource的人需要相应地更新他们的路由和url_for语句。
添加了额外的map.resource识别测试。
添加了使用新的WSGI.org路由变量规范进行路由解析的WSGI中间件。
添加了_ignore选项,以忽略SCRIPT_NAME设置。由Ian Bicking建议。
版本1.5.2(2006年10月16日)
修复了在使用时保留主机端口号名称的有资格关键字,除非明确传递了主机。由Jon Rosebaugh报告。
向url_for添加了有资格关键字选项,使其生成完整的URL。解决了#29。
修复了url_for文档字符串中的示例,以确保它们是准确的。
版本1.5.1(2006年10月4日)
修复了正则表达式中转义部分名称的bug,由James Taylor报告。
版本1.5(2006年9月19日)
对map.resource和单元测试进行了重大更新,彻底检查以确保其创建所有正确的路由(现在是这样)。将单元测试覆盖率提高到95%。
添加了单元测试以确保controller_scan正确地与嵌套控制器文件一起工作,并适当地扫描目录结构。这使得Routes实用模块达到完全代码覆盖率。
修复了url_for,当更改协议时,从主机中删除端口号信息。
对_RequestConfig对象进行了更彻底的测试,并增加了设置自己的对象的能力。这提高了__init__模块的测试覆盖率到100%。
修复了sub_domain在url_for中不保留端口号信息的bug,并添加了单元测试。由Jonathan Rosebaugh报告。
添加了单元测试以确保sub_domain选项与命名路由一起工作,清理了url_for内存参数过滤。修复了命名路由和sub_domain选项不一起工作的问题,由Jonathan Rosebaugh报告。
更改了sub-domain添加到match-dict中的顺序,以便可以在条件函数中使用。
版本1.4.1(2006年9月6日)
将sub_domains选项添加到mapper中,同时添加了sub_domains_ignore列表,用于将子域视为与主域等效的子域。当sub_domains激活时,url_for现在将接受一个sub_domain选项,该选项可以更改路由将到达的主机。
允许过滤器函数提供_host、_protocol、_anchor参数,然后使用适当的宿主/协议/锚目标创建URL。
应用了来自问题#28的补丁。解决了Mapper的controller_scan函数需要有效的目录参数的问题。由Zoran Isailovski提交。
版本1.4(2006年7月21日)
修复了与Rails版本中map.resource相关的bug。
修复了map.resource成员方法不需要成员ID的bug。
修复了与处理关键字参数controller相关的bug。
添加了map.resource命令,该命令可以自动生成一批用于以RESTful方式由Web框架使用的路由。
添加了对“method”参数的URL生成处理。如果指定了“method”,则不会丢弃,而是将其更改为“_method”以便框架使用。
在map.connect中添加了条件选项。接受一个包含可选关键字参数“method”或“function”的字典。Method是对于路由有效的HTTP方法列表。Function是将在environ和matchdict上被调用的函数,其中matchdict是URL匹配创建的字典。
修复了redirect_to函数使用绝对URL的问题。现在redirect_to将所有参数传递给url_for,然后将生成的URL传递给redirect函数。由climbus报告。
发布版本1.3.2(2006年4月30日)
修复了在匹配期间将_filter包含到match_dict中的bug,由David Creemer报告。
修复了使用urllib.encode进行不正确的URL转义的问题,由Jason Culverhouse提供补丁。
发布版本1.3.1(2006年4月4日)
Mapper有一个可选属性append_slash。当设置为True时,生成的任何URL都将附加一个斜杠到末尾。
修复了prefix选项,如果PATH_INFO在prefix正则表达式之后为空,则将其设置为“/”,以便匹配过程继续。
修复了导致初始路由之后的路由看不到正确URL的prefix bug。由Jochen Kupperschmidt捕获。
发布版本1.3(2006年2月25日)
url_for关键字过滤器:命名路由现在可以有一个_filter参数,它应该指定一个只接受字典作为唯一参数的函数。该字典将包含传递给url_for的全部关键字参数,该函数可以按需修改。然后,将使用新字典作为如果它是传递给url_for的原生关键字参数集。
修复了由于在内置控制器扫描器中使用关键字参数进行排序而导致的Python 2.3不兼容性问题。
发布版本1.2(2006年2月17日)
如果命名路由不存在,并且使用url_for调用,则不会使用关键字参数生成URL,而是将它们用作为提供的原始URL的查询参数。(向后不兼容)
如果Mapper有debug=True,则使用match将返回两个额外的值,如果匹配了,则匹配的路由。还有一个尝试过的路由列表及其未通过的原因信息。
url_for增强:现在可以使用“raw”URL生成正确的URL,以自动包括必要的SCRIPT_NAME,用于静态内容。静态命名路由现在可以用于简化所需的常见路径信息。
控制器扫描器现在将控制器名称排序,以便最长的名称排在第一位。这确保在执行更浅层的控制器之前,先执行最深嵌套的控制器,以提高可预测性。
控制器扫描器现在正确扫描目录,1.1版本中的列表在创建控制器列表时遗漏了目录前缀。(感谢Justin将我的注意力引到这个问题上)
发布版本1.1(2006年1月13日)
路由映射器添加:现在接受几个可选参数,这些参数确定它将如何生成正则表达式。现在可以保留一个函数,用于确定可用的控制器。提供了默认目录扫描器。给定默认扫描器的目录或函数,当需要时,Mapper将自动运行它以获取控制器列表。
可用于分割路由的语法,以允许更复杂的路由路径,例如“:controller/:(action)-:(id).html”
与每个请求的路由更易于设置/集成。在WSGI environ中设置environ将运行match,并设置url_for等所需的所有内容。
发布版本1.0.2(2005年12月30日)
在存在默认值但未填充None的地方,路由的值不正确。
在生成过程中传递0将评估为None,导致缺失URL部分
发布版本1.0.1(2005年12月18日)
本地可调用请求 - 您现在可以指定自己的可调用函数,然后使用该函数来存储 request_config 数据。这在可能存在多个请求在单个线程中运行的环境中非常有用。该可调用函数应返回一个请求特定对象,以便附加属性。有关更多信息,请参阅 routes.__init__.py。
版本 1.0(2005年11月21日)
routes.__init__ 现在将加载大多数人实际想要使用的一般符号。因此,您可以选择
from routes import *
或者
from routes import request_config, Mapper
以下名称可用于从 routes 导入
request_config, Mapper, url_for, redirect_to
路由名称 - 您现在可以命名一个路由,这将保存为以后通过 url_for 或 redirect_to 使用而定义的默认值。因此,以下这样的路由和 url_for
m.connect('home', controller='blog', action='splash') url_for(controller='blog', action='splash') # => /home
现在可以使用一个名称来使用
m.connect('home_url','home', controller='blog', action='splash') url_for('home_url') # => /home
还可以向 url_for 添加更多关键字,并将覆盖命名路由中的默认值。
尾部 / - 路由识别先前在尾部斜杠上失败,这不是一个真正的错误,也不是一个真正的特性。无论如何,尾部斜杠现在就像 Rails 版本中一样是可以的。
redirect_to 现在有两个测试集,以确保其正确工作
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。