Wszystkie trasy dla aplikacji są przechowywane, w app.url_map
której znajduje się instancja werkzeug.routing.Map
. Możesz iterować po Rule
instancjach za pomocą iter_rules
metody:
from flask import Flask, url_for
app = Flask(__name__)
def has_no_empty_params(rule):
defaults = rule.defaults if rule.defaults is not None else ()
arguments = rule.arguments if rule.arguments is not None else ()
return len(defaults) >= len(arguments)
@app.route("/site-map")
def site_map():
links = []
for rule in app.url_map.iter_rules():
# Filter out rules we can't navigate to in a browser
# and rules that require parameters
if "GET" in rule.methods and has_no_empty_params(rule):
url = url_for(rule.endpoint, **(rule.defaults or {}))
links.append((url, rule.endpoint))
# links is now a list of url, endpoint tuples
Aby uzyskać więcej informacji, zobacz Wyświetlanie linków do utworzonych nowych stron internetowych .
url = url_for(rule.endpoint)
. Właśnie dostałem ten błądBuildError: ('DeleteEvent', {}, None)
. Zamiast tego, aby uzyskać adres URL, który właśnie zrobiłemurl = rule.rule
. Masz jakiś pomysł, dlaczego twoja metoda nie działa na mnie?DeleteEvent
ma wymagany parametr - możesz albo określić ten przypadek w specjalnym przypadku, albo odfiltrować dowolne reguły, w którychlen(rule.arguments) > len(rule.defaults)
url_for
nie można wygenerować adresu URL dla tej metody bez parametru, prawda? OK, ale wygląda na to, że moja metoda i tak działa, po prostu zachowuje tę część, jeśli adres URL jest parametrem. Dzięki!url_for(rule.endpoint)
używaćrule.rule
tego lepiej, ponieważ rozwiązuj przypadki, w których masz więcej niż jedną trasę dla tej samej metody.Właśnie spotkałem to samo pytanie. Powyższe rozwiązanie jest zbyt złożone. Po prostu otwórz nową powłokę w swoim projekcie:
Pierwsza „ aplikacja ” to mój skrypt projektu: app.py , druga to nazwa mojej sieci.
(to rozwiązanie jest dla małej sieci z małą trasą)
źródło
Map
instancję lub uzyskać dostęp do żadnej z właściwości zawartych wRule
niej plików, bez których nie można zrobić nic użytecznego.Tworzę metodę pomocniczą na moim
manage.py
:Rozwiązuje brakujący argument, budując fikcyjny zestaw opcji. Wynik wygląda następująco:
Następnie, aby go uruchomić:
python manage.py list_routes
Więcej informacji na temat manage.py checkout: http://flask-script.readthedocs.org/en/latest/
źródło
urllib.unquote
naurllib.parse.unquote
iprint line
naprint(line)
i działa również w Pythonie 3.x.Podobnie jak w przypadku odpowiedzi Jonathana, zdecydowałem się to zrobić. Nie widzę sensu używania url_for, ponieważ zepsuje się, jeśli twoje argumenty nie są ciągami, np. Float
źródło
Najwyraźniej od wersji 0.11 Flask ma wbudowany interfejs CLI . Jedno z wbudowanych poleceń wyświetla listę tras:
źródło
flask urls
dla mnie (0.12.1). Widziałem to,flask --help
ale nie widzę tras ani adresów URL na stronie CLIPonieważ nie określono, że ma być uruchamiany z wiersza polecenia, następujące elementy można łatwo zwrócić w json dla pulpitu nawigacyjnego lub innego interfejsu innego niż wiersz poleceń. Rezultat i rezultat naprawdę nie powinny być mieszane z punktu widzenia projektu. To zły projekt programu, nawet jeśli jest to mały program. Poniższy wynik może następnie zostać użyty w aplikacji internetowej, wierszu polecenia lub czymkolwiek innym, co pobiera json.
Nie określiłeś również, że musisz znać funkcję Pythona powiązaną z każdą trasą, więc to dokładniej odpowiada na twoje pierwotne pytanie.
Używam poniżej, aby samodzielnie dodać dane wyjściowe do panelu monitorowania. Jeśli chcesz poznać dostępne metody tras (GET, POST, PUT itp.), Musisz połączyć je z innymi odpowiedziami powyżej.
Funkcja repr () reguły dba o konwersję wymaganych argumentów w trasie.
To samo przy użyciu rozumienia list:
Przykładowe dane wyjściowe:
źródło
Jeśli chcesz uzyskać dostęp do samych funkcji widoku, zamiast tego
app.url_map
użyjapp.view_functions
.Przykładowy skrypt:
Wynik uruchomienia powyższego skryptu:
(Zwróć uwagę na włączenie trasy „statycznej”, która jest tworzona automatycznie przez Flask).
źródło
Możesz wyświetlić wszystkie trasy przez powłokę kolby, uruchamiając następujące polecenia po wyeksportowaniu lub ustawieniu zmiennej środowiskowej FLASK_APP.
flask shell app.url_map
źródło
wewnątrz aplikacji flask wykonaj:
źródło