Obtenir la liste de toutes les routes définies dans le Flacon app
J'ai un complexe Flacon à base de web app. Il y a beaucoup de fichiers distincts avec les fonctions d'affichage. Les Url sont définies avec le @app.route('/...')
décorateur. Est-il possible d'obtenir une liste de toutes les routes qui ont été déclarés tout au long de mon application? Il est peut-être un peu de méthode, je peux faire appel à la app
objet?
Vous devez vous connecter pour publier un commentaire.
Toutes les routes pour une application sont stockées sur
app.url_map
qui est une instance dewerkzeug.le routage.Map
. Vous pouvez effectuer une itération sur lesRègle
instances à l'aide de laiter_rules
méthode:Voir Afficher des liens vers de nouvelles pages web créé pour un peu plus d'informations.
url = url_for(rule.endpoint)
. Je viens de recevoir cette erreurBuildError: ('DeleteEvent', {}, None)
. Au lieu de cela, pour obtenir l'url j'ai juste faiturl = rule.rule
. Aucune idée pourquoi votre méthode ne fonctionne pas pour moi?DeleteEvent
a un obligatoire paramètre - vous pouvez soit le cas spécial d'un ou de filtrer les règles applicables en cas delen(rule.arguments) > len(rule.defaults)
url_for
ne peut pas générer l'URL de cette méthode au sans paramètre, droit? OK, mais il semble que ma méthode fonctionne de toute façon, on ne conserve que la partie si l'URL en paramètre. Merci!python
REPL environnement, le chargement de votre principal flacon d'application, de l'e.g,import main
et directement en affichant son url_map,main.app.url_map
. Il va vous donne la liste de tous les itinéraires définisurl_for(rule.endpoint)
utilisationrule.rule
qui est beaucoup mieux à cause de résoudre le cas où vous avez plus d'une voie pour la même méthode.Je viens de rencontrer la même question. Ceux de la solution ci-dessus est trop complexe.
Il suffit d'ouvrir un nouveau shell en vertu de votre projet:
Le premier " application' est mon projet de script: app.py,
une autre est de mon site web nom de l'.
(cette solution est pour grêles web avec un peu de route)
Map
instance ou d'accéder à toutes les propriétés de laRule
s il contient, sans laquelle vous ne pouvez pas réellement faire quelque chose d'utile.Je fais une méthode d'aide sur mon
manage.py
:Il résout l'argument manquant par la construction d'un mannequin ensemble d'options. La sortie ressemble à ceci:
Puis de l'exécuter:
python manage.py list_routes
Pour plus d'informations sur manage.py checkout: http://flask-script.readthedocs.org/en/latest/
urllib.unquote
àurllib.parse.unquote
etprint line
àprint(line)
et il fonctionne en python 3.x ainsi.Similaire à la réponse de Jonathan, j'ai opté pour ce faire à la place. Je ne vois pas l'intérêt de l'utilisation de url_for qu'il va se casser si vos arguments ne sont pas de chaîne par exemple float
Apparemment, depuis la version 0.11, Flacon est doté d'un CLI. L'une des commandes intégrées les routes:
flask urls
pour moi (0.12.1). Vu que dansflask --help
mais je ne vois pas de routes ou des url sur la page CLIPuisque vous n'avez pas à spécifier qu'il doit être exécuté en ligne de commande, voici ce qui peut facilement être retourné en json pour un tableau de bord ou d'autres non-interface de ligne de commande. Le résultat et la sortie ne devrait pas être mélangée à partir d'une conception de point de vue en tout cas. C'est une mauvaise conception du programme, même si c'est un tout petit programme. Le résultat ci-dessous peut être utilisé dans une application web, la ligne de commande, ou toute autre chose qui ingère json.
Vous ne précisez pas que vous avez besoin de savoir l'python de la fonction associée à chaque route, de sorte que ce plus précisément les réponses à votre question initiale.
J'utilise ci-dessous pour ajouter le résultat dans un tableau de bord de suivi moi-même. Si vous voulez l'itinéraire disponible méthodes (GET, POST, PUT, etc.), vous devez les combiner avec d'autres réponses ci-dessus.
Règle repr() se charge de convertir les arguments requis dans l'itinéraire.
La même chose à l'aide d'une compréhension de liste:
Exemple de sortie:
Vous pouvez consulter toutes les Routes via flacon shell, exécutez les commandes suivantes après l'exportation ou de réglage de FLASK_APP variable d'environnement.
flask shell
app.url_map
Si vous avez besoin d'accéder à l'affichage des fonctions elles-mêmes, alors au lieu de
app.url_map
, utilisezapp.view_functions
.Exemple de script:
Sortie de l'exécution du script ci-dessus:
(Note de l'inclusion de la "statique" de l'itinéraire, qui est créé automatiquement par Flacon.)
à l'intérieur de votre ballon application: