2011-11-17 12 views
11

Korzystanie z Sehttp butelki: //bottlepy.org/docs/dev/routing.html#wildcard-filtersJak akceptujesz dowolny adres URL na serwerze Pythona?

Chciałbym przyjąć dowolny adres URL, a następnie zrobić coś z adresem URL.

np.

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

Jest to trudne, ponieważ adresy URL zawierają ukośniki, a butelka dzieli się na ukośniki.

+0

Coś próbowałam: @ bottle.route ("/ hello") działa dobrze, ale @ bottle.route ("/ hello/") nie działa ... – Dave

Odpowiedz

15

podstawie nowej butelki (v0.10), użyć filtru Re:

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

można zrobić ze starymi parametrami TOO:

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

Hmm, próbowałem i dało mi 404 nie znaleziono. Jednak próbowałem twoje stare rozwiązanie parametrów w to działa! Czy to oznacza, że ​​mam starą wersję butelki? Mam tutaj zainstalowaną butelkę /Library/Python/2.6/site-packages/bottle-0.9.7-py2.6.egg/bottle.py i jest napisane, że jest to wersja 0.9.7, więc dlaczego miałoby to być? – Dave

+0

Butelka 0.10 została wydana zaledwie tydzień temu. Butelka 0.9 nie jest naprawdę stara, ale nie ma filtrów takich jak pokazałem z "/ ". Zajrzyj na http://bottlepy.org/docs/dev/changelog.html#release-0-10, aby dowiedzieć się nowych rzeczy, które możesz aktualizować do nowej wersji. – iurisilvio

+0

To mogłoby działać w niektórych przypadkach, ale dusi się w adresach URL zawierających # $ i podobnych ... – starenka

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

powinien działać dobrze

bym wtedy napisać regex do samej funkcji.

Albo możesz to zrobić z nowym filtrem, ale aby to zrobić, musisz napisać funkcję filtra i dodać ją do aplikacji.

+0

Potrzebuję go do akceptowania adresów URL, a adresy URL zawierają w nich ukośniki. Na przykład: "localhost: 8080/hello/http: //www.test.com/some/page" musi całkowicie dopasować adres URL. – Dave

+0

hmmm ustalające to teraz –

+0

Całkowicie nieznany z Butelką, ale jaka jest wartość myurl w tym przypadku? Jeśli jest to po prostu "test.com", zakładam, że pozostałe elementy URL-i są również przekazywane. Spróbuj def coś (* args) i zobacz, czy wszystkie elementy są w args. – Tom

8

Chyba (OP) były na właściwy tor na początek. <mypath:path> powinien załatwić sprawę.

prostu próbowałem go z butelki 0,10 i to działa:

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

Oto mój kod. Co stanie się, gdy uruchomisz to w swoim systemie?

Pozdrawiam!

0

w butelce 0.12.9 Zrobiłem to osiągnąć opcjonalnych tras dynamiczna:

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