Какие символы TurboGears заменяет в 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!" как и ожидалось. Но эти URL также работают:

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

И так далее...

Какой полный список символов можно заменить подчеркиванием в URL-адресах TurboGears?

Кроме того, можно ли ограничить эту функцию только заменой определенных символов? В идеале я хочу, чтобы URL-адреса с дефисами ( http://localhost:5000/all--things) работали, а URL-адреса с подчеркиванием ( http://localhost:5000/all__things) или любые другие странные символы не работали.

1 ответ

Решение

Это управляется path_translator который может быть настроен через dispatch_path_translator вариант в app_cfg.py, Это можно отключить, передав None или предоставляя пользовательскую функцию.

Любая предоставленная функция получит часть пути, которая в настоящее время обрабатывается, и должна вернуть ее нормализованную.

Транслятор пути по умолчанию основан на string.punctuation (см. https://github.com/python/cpython/blob/c30098c8c6014f3340a369a31df9c74bdbacc269/Lib/string.py)

В случае, если у вас есть потребности в нестандартной маршрутизации, я предлагаю вам рассмотреть https://github.com/TurboGears/tgext.routes которая может помочь вам в более сложных случаях через @route декоратор.

Другие вопросы по тегам