Flask erfordert eine explizite Zuordnung von URLs und Methoden, wie unten gezeigt.
# '/'Rufen Sie die Indexmethode auf, wenn auf sie zugegriffen wird
@app.route("/"):
def index():
return "<h1>Hello, World!</h1>"
Beispiel: So erstellen Sie ein Formular, das beim Zugriff auf "/ Hello / index" automatisch die Indexmethode des Hello-Controllers (Stil wie Rails oder CakePHP) aufruft.
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>"
Wenn Sie im Routendekorator "\ <Pfad: Pfad>" angeben, wird der angeforderte Pfad als Zeichenfolge im variablen Pfad gespeichert. Der Pfad danach ist ein Variablenname, sodass Sie einen beliebigen Namen eingeben können (z. B. \ <path: mypath>).
Da das erste Element des Arrays, das dies mit "/" teilt, der Controller-Name ist, verwenden Sie import_module von importlib, um den Pfad zum Controller als Zeichenfolge anzugeben und den Controller abzurufen.
Verwenden Sie schließlich getattr, um die tatsächliche Methode aus der Methodennamenzeichenfolge abzurufen und zurückzugeben.
Jetzt können Sie den Controller implizit angeben, ohne ihn explizit anzugeben! Du hast es geschafft! !!
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
...
Das ist gegen Pythons Philosophie \ (^ o ^) /
Recommended Posts