[PYTHON] Mappez automatiquement les contrôleurs à partir des URL avec Flask

Flask nécessite un mappage explicite des URL et des méthodes, comme indiqué ci-dessous.

# '/'Appelez la méthode d'index lors de l'accès
@app.route("/"):
def index():
    return "<h1>Hello, World!</h1>"

Par exemple, comment en faire un formulaire qui appelle automatiquement la méthode d'index du contrôleur Hello (style comme Rails ou CakePHP) lorsque "/ Hello / index" est accédé.

Structure du répertoire

scénario

app.py


from flask import Flask
import importlib

app = Flask(__name__)

@app.route("/<path:path>")
def router(path):
    path = path.split("/")
    module_name = "Controller." + path[0]
    module = importlib.import_module(module_name)
    method = getattr(module, path[1])
    return method()

Controller/Hello.py


def index():
    return "<h1>Hello, Controller!</h1>"

Si vous spécifiez "\ <chemin: chemin>" dans le décorateur d'itinéraire, le chemin demandé sera stocké sous forme de chaîne de caractères dans le chemin de variable. Le chemin qui suit est un nom de variable, vous pouvez donc entrer le nom de votre choix (comme \ <chemin: mypath>).

Puisque le premier élément du tableau avec ceci comme divisé par "/" est le nom du contrôleur, utilisez import_module de importlib pour spécifier le chemin vers le contrôleur sous forme de chaîne et obtenir le contrôleur.

Enfin, utilisez getattr pour obtenir la méthode réelle à partir de la chaîne de nom de méthode et la renvoyer.

Serpentin

Vous pouvez maintenant spécifier implicitement le contrôleur sans le spécifier explicitement! Tu l'as fait! !!

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
...

C'est contraire à la philosophie de Python \ (^ o ^) /

Recommended Posts

Mappez automatiquement les contrôleurs à partir des URL avec Flask
Essayez d'utiliser Blueprint avec Flask pour séparer les contrôleurs
Charger des images à partir d'une URL à l'aide de Pillow dans Python 3
Lire les paramètres de journalisation à partir d'un fichier externe avec Flask
Comment modifier le répertoire statique par défaut dans Flask
Modifier le répertoire de stockage de fichiers statiques et l'URL dans Flask
Présentation de WebPay de Flask
Téléchargeur d'images avec Flask
Mappez automatiquement les contrôleurs à partir des URL avec Flask
[Django] Créez un formulaire qui remplit automatiquement l'adresse à partir du code postal
Comment refléter ImageField dans Django + Docker (oreiller)
Modèle dans Django
Formulaire à Django
Comment se connecter automatiquement comme 1Password depuis CLI