我有一个简单的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)或任何其他奇怪字符的网址无效。
答案 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
装饰器帮助您处理更复杂的情况。