TurboGears在URL中替换了哪些字符?

时间:2016-11-18 22:17:51

标签: python turbogears2 turbogears

我有一个简单的TurboGears 2脚本,名为app.py:

#!/usr/bin/env python3

from wsgiref.simple_server import make_server
from tg import expose, TGController, AppConfig

class RootController(TGController):
    @expose()
    def all__things(self):
        return "Hello world!"

config = AppConfig(minimal=True, root_controller=RootController())

print("Serving on port 5000...")
httpd = make_server('', 5000, config.make_wsgi_app())
httpd.serve_forever()

当我运行app.py并访问http://localhost:5000/all__things时,我看到“Hello world!”正如所料。但这些网址也有效:

http://localhost:5000/all--things
http://localhost:5000/all@@things
http://localhost:5000/all$$things
http://localhost:5000/all++things
http://localhost:5000/all..things
http://localhost:5000/all,,things

以及组合:

http://localhost:5000/all-_things
http://localhost:5000/all_-things
http://localhost:5000/all-@things
http://localhost:5000/all@-things
http://localhost:5000/all$@things
http://localhost:5000/all@$things

等等......

在TurboGears网址中可以替换下划线的完整字符列表是什么?

此外,此功能是否可以仅限于替换某些字符?理想情况下,我希望带有破折号(http://localhost:5000/all--things)的网址和带下划线(http://localhost:5000/all__things)或任何其他奇怪字符的网址无效。

1 个答案:

答案 0 :(得分:1)

path_translator管理,可以通过dispatch_path_translator中的app_cfg.py选项进行配置。可以通过传递None或提供自定义功能来禁用它。

提供的任何功能都将接收当前正在处理的路径部分,并且必须将其归一化。

默认路径转换器基于string.punctuation(请参阅https://github.com/python/cpython/blob/c30098c8c6014f3340a369a31df9c74bdbacc269/Lib/string.py#L31

如果您有自定义路由需求,我建议您考虑https://github.com/TurboGears/tgext.routes,它可以通过@route装饰器帮助您处理更复杂的情况。