TurboGears 在 URL 中替换了哪些字符?
Which characters does TurboGears replace in the URL?
我有一个简单的 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 URL 中可替换下划线的完整字符列表是什么?
另外,这个功能是否可以限制为只能替换某些字符?理想情况下,我希望带有破折号 (http://localhost:5000/all--things) 的 URL 以及带有下划线 (http://localhost:5000/all__things) 或任何其他奇怪字符的 URL不工作。
这是由 path_translator
管理的,可以通过 app_cfg.py
中的 dispatch_path_translator
选项进行配置。可以通过传递 None
或提供自定义函数来禁用它。
提供的任何函数都将接收当前正在处理的路径部分,并且必须return对其进行规范化。
默认路径转换器基于 string.punctuation
(参见 https://github.com/python/cpython/blob/c30098c8c6014f3340a369a31df9c74bdbacc269/Lib/string.py#L31)
如果您有自定义路由需求,我建议您考虑 https://github.com/TurboGears/tgext.routes,这可能会通过 @route
装饰器在更复杂的情况下帮助您。
我有一个简单的 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 URL 中可替换下划线的完整字符列表是什么?
另外,这个功能是否可以限制为只能替换某些字符?理想情况下,我希望带有破折号 (http://localhost:5000/all--things) 的 URL 以及带有下划线 (http://localhost:5000/all__things) 或任何其他奇怪字符的 URL不工作。
这是由 path_translator
管理的,可以通过 app_cfg.py
中的 dispatch_path_translator
选项进行配置。可以通过传递 None
或提供自定义函数来禁用它。
提供的任何函数都将接收当前正在处理的路径部分,并且必须return对其进行规范化。
默认路径转换器基于 string.punctuation
(参见 https://github.com/python/cpython/blob/c30098c8c6014f3340a369a31df9c74bdbacc269/Lib/string.py#L31)
如果您有自定义路由需求,我建议您考虑 https://github.com/TurboGears/tgext.routes,这可能会通过 @route
装饰器在更复杂的情况下帮助您。