Eine Liste aller Routen definiert, die in der Kolben-app
Ich habe eine komplexe Kolben-basierte web-app. Es gibt viele separate Dateien mit view-Funktionen. Ihre URLs sind definiert mit der @app.route('/...')
Dekorateur. Gibt es eine Möglichkeit, um eine Liste aller Routen, die erklärt wurden, während meine app? Vielleicht gibt es eine Methode, die ich aufrufen kann, auf der app
Objekt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle Routen für eine Anwendung gespeichert sind, auf
app.url_map
eine Instanz vonwerkzeug.routing.Map
. Sie können Durchlaufen dieRegeln
Instanzen mit demiter_rules
Methode:Sehen Die Anzeige links auf neue Webseiten erstellt für ein bisschen mehr Informationen.
url = url_for(rule.endpoint)
. Ich habe gerade diesen FehlerBuildError: ('DeleteEvent', {}, None)
. Stattdessen, um die url habe ich nururl = rule.rule
. Jede Idee, warum deine Methode bei mir nicht funktioniert?DeleteEvent
hat ein erforderlich - parameter können Sie entweder den speziellen Fall, dass eine oder filter alle Regeln, wolen(rule.arguments) > len(rule.defaults)
url_for
können nicht generieren die URL für diese methid, ohne parameter, richtig? OK, aber wie es aussieht, funktioniert meine Methode sowieso, es hält nur den Teil falls eine URL als parameter. Danke!python
REPL-Umgebung, laden des Haupt-Kolben-Anwendung, e.gimport main
und direkt mit seinen url_map,main.app.url_map
. Es gibt dir die Liste aller definierten Routenurl_for(rule.endpoint)
verwendenrule.rule
das ist viel besser, weil Fälle lösen, in denen Sie mehr als eine route für die gleiche Methode.Traf ich gerade die gleiche Frage. Diese Lösung oben ist zu Komplex.
Öffnen Sie einfach eine neue shell unter Ihrem Projekt:
Den ersten " app' ist mein Projekt Skript: app.py,
ein anderes ist mein web-name.
(diese Lösung ist für blechern web mit ein wenig route)
Map
Instanz oder den Zugriff auf die Eigenschaften derRule
s, die es enthält, ohne die Sie nicht können wirklich etwas tun, nützlich ist.Ich eine helper-Methode auf meine
manage.py
:Er löst das das fehlende argument, durch den Bau einer dummy-set von Optionen. Die Ausgabe sieht so aus:
Dann, um es auszuführen:
python manage.py list_routes
Mehr auf manage.py Kasse: http://flask-script.readthedocs.org/en/latest/
urllib.unquote
zuurllib.parse.unquote
undprint line
zuprint(line)
und es funktioniert auch in python 3.x als gut.Ähnlich zu Jonathan ' s Antwort, die ich entschied sich stattdessen dazu. Ich sehe nicht den Punkt der Anwendung der url_for, wie es brechen wird, wenn Ihre Argumente sind nicht als string, z.B. float
Offenbar seit version 0.11, Flasche hat eine integrierte CLI. Eines der built-in-Befehle sind die Strecken:
flask urls
für mich (0.12.1). Sah, dass Sie inflask --help
aber ich sehe keine Routen oder urls auf die CLI SeiteDa Sie nicht angeben, dass es laufen muss, wird die Befehlszeile, die der folgenden konnte problemlos zurückgegeben werden in json für ein Armaturenbrett oder eine andere non-command-line-interface. Das Ergebnis und die Ausgabe sollte wirklich nicht sein, vermischt aus einer design-Perspektive jedenfalls. Es ist schlimm, Programm-design, auch wenn es nur ein kleines Programm. Das untenstehende Ergebnis könnte dann in einer web-Anwendung, command-line, oder irgendetwas anderes, das sich nimmt, json.
Du auch nicht angegeben, dass Sie gebraucht werden, um die python-Funktion in Verbindung mit jeder route, so dass dies genauer Antworten zu deiner ursprünglichen Frage.
Ich unten verwenden, um die Ausgabe an ein monitoring-dashboard selbst. Wenn Sie möchten, dass die route Methoden (GET, POST, PUT, etc.), müssten Sie kombinieren es mit anderen Antworten.
Regel repr() übernimmt die Konvertierung der Parameter in der route.
Die gleiche Sache mit Hilfe einer list comprehension:
Beispiel-Ausgabe:
Wenn Sie brauchen, um den Zugriff auf die view-Funktionen selbst dann statt
app.url_map
verwendenapp.view_functions
.Beispiel-Skript:
Ausgabe von der Skript-Ausführung oben:
(Hinweis: die Aufnahme des "static" - route, die erstellt wird, automatisch durch Glaskolben.)