Как вы принимаете любой URL-адрес на сервере Python Bottle?

Использование бутылки Sehttp://bottlepy.org/docs/dev/routing.html#wildcard-filters

Я хотел бы принять любой URL-адрес, а затем сделать что-то с URL-адресом.

например.

@bottle.route("/<url:path>")
def index(url):
  return "Your url is " + url

Это сложно, потому что в них есть косые черты, а Bottle разбивается на косые черты.

Ответ 1

На основе новой бутылки (v0.10) используйте фильтр re:

@bottle.route("/<url:re:.+>")

Вы можете сделать это со старыми параметрами:

@bottle.route("/:url#.+#")

Ответ 2

Я думаю, что вы (OP) были на правильном пути для начала. <mypath:path> должен сделать трюк.

Я просто попробовал его с бутылкой 0,10, и он работает:

~>python test.py >& /dev/null &
[1] 37316
~>wget -qO- 'http://127.0.0.1:8090/hello/cruel/world'
Your path is: /hello/cruel/world

Вот мой код. Что происходит, когда вы запускаете это в своей системе?

from bottle import route, run

@route('<mypath:path>')
def test(mypath):
    return 'Your path is: %s\n' % mypath

run(host='localhost', port=8090)

Ура!

Ответ 3

@bottle.route("/hello/:myurl")
def something(myurl):
    print myurl
    return "Your url was %s" % myurl

Должно работать просто отлично

Затем я написал регулярное выражение в самой функции.

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

Ответ 4

В Bottle 0.12.9 я сделал это для достижения дополнительных динамических маршрутов:

@bottle.route("/<url:re:.*>")
def index(url):
  return "Your url is " + url