Я настраиваю bottle .py с uWSGI и $ uwsgi --http :1024 --wsgi-file app.py
. app.py
содержит значение по умолчанию:
import bottle
application = bottle.default_app()
и множество декораторов маршрута и функций, таких как:
@bottle.route('/<A>/<B>')
def somedef():
return bottle.template(...)
Временно обслуживается с http://example.com/secret_URL/ Это, конечно, заставляет <A>
всегда анализироваться как «secret_URL».
Как можно изменить URL («переписать», убрать «secret_URL /») так, чтобы веб-приложение, то есть bottle не "видит" это?
Я нашел add_hook
, но до сих пор не смог изменить путь запроса :
@bottle.hook('before_request')
def test():
bottle.request.url = bottle.request.url.replace("secret_URL/","")
Причина становится понятной:
Класс Request охватывает среду WSGI и предоставляет полезные методы для анализа и доступа к данным формы, файлам cookie, загрузкам файлов и другим метаданным. Большинство атрибутов доступны только для чтения .
В документах также указывается:
Добавление новых атрибутов в запрос фактически добавляет их в среду словарь (как 'bottle .request.ext.'). Это рекомендуемый способ хранения и доступа к указанным в запросе c данным.
и
environment
Словарь обернутых WSGI-окружений. Это единственный настоящий атрибут. Все остальные атрибуты на самом деле являются свойствами только для чтения.
bottle.request.environ
содержит, среди прочего, REQUEST_URI, PATH_INFO, bottle.raw_path, bottle.request, bottle.request.urlparts
и некоторые объекты.
Какие из них могут быть записаны и должны быть написано для желаемого эффекта?
Это также ставит вопрос о том, как обрабатывать такие ссылки на стороне клиента HTML без изменения каждого href
.