Flask-Blueprint-Objekt-API
Blueprint wird verwendet, um eine Anwendung in wiederverwendbare Module aufzuteilen. Jeder Blueprint kann eigene Routen, Vorlagen, statische Dateien und Hooks haben.
Erstellungsmethode:
bp = Blueprint("auth", __name__)
Konstruktorparameter
| Parameter | Type | Standardwert | Beschreibung |
|---|---|---|---|
| name | str | Erforderlich | Blueprint-Name, der als Endpunktpräfix in url_for verwendet wird |
| import_name | str | Erforderlich | Der Modulname, in dem sich der Blueprint befindet, wird verwendet, um Ressourcen zu finden. Normalerweise wird __name__ übergeben. |
| static_folder | str | Keine | Ordner für statische Dateien des Blueprints |
| static_url_path | str | Keine | Der URL-Pfad, unter dem statische Dateien bereitgestellt werden. |
| template_folder | str | Keine | Vorlagenordner des Blueprints |
| url_prefix | str | Keine | Ein gemeinsames Präfix für alle Routen im Blueprint, z. B. "/auth". |
| subdomain | str | Keine | Subdomain, die von Blueprint-Routen abgeglichen wird |
| url_defaults | dict | Keine | Standard-URL-Parameter für Blueprint-Routen |
| root_path | str | Keine | Blueprint-Stammpfad, normalerweise automatisch erkannt |
| cli_group | str | Keine | Der Name der CLI-Befehlsgruppe. Verwendet standardmäßig den Blueprint-Namen. |
Kernattribute
| Eigenschaft | Type | Beschreibung |
|---|---|---|
| name | str | Blueprint-Name, der nach der Registrierung als Endpunkt-Präfix verwendet wird |
| cli | AppGroup | Die Blueprint-spezifische CLI-Befehlsgruppe, in der benutzerdefinierte Befehle hinzugefügt werden können. |
| has_static_folder | bool | Ob ein statischer Ordner konfiguriert ist |
Routenmethoden
Die Verwendung von Blueprints ist dieselbe wie bei einer Flask-Anwendung, außerappErsetzen durchbp:
| Methoden | Beschreibung |
|---|---|
| route(rule, **options) | Dekorator, der eine URL an eine View-Funktion bindet. |
| get / post / put / delete / patch(rule, **options) | Shortcut-Dekoratoren für HTTP-Methoden |
| add_url_rule(rule, endpoint, view_func, **options) | Programmgesteuertes Hinzufügen von URL-Regeln |
Hook-Dekorator
Die Hooks des Blueprints wirken sich nur auf Routen innerhalb des Blueprints aus:
| Methoden | Beschreibung |
|---|---|
| before_request | Vor allen Anfragen innerhalb des Blueprints ausführen |
| after_request | Nach der Anfrageantwort innerhalb des Blueprints ausführen |
| teardown_request | Ausführen, wenn der Anfragekontext innerhalb des Blueprints zerstört wird |
| errorhandler(code_or_exception) | Fehlerhandler innerhalb des Blueprints |
| url_value_preprocessor | URL-Wert-Vorverarbeiter innerhalb des Blueprints |
| url_defaults | Standard-URL-Parameter innerhalb des Blueprints |
| template_filter / template_test / template_global | Blueprint-Vorlagenfilter / Tests / globale Funktionen. |
Blueprint-spezifische Methoden
| Methoden | Beschreibung |
|---|---|
| register(app, options) | Registriert das Blueprint bei der Flask-Anwendung. Wird intern von app.register_blueprint() aufgerufen |
| record(func) | Registriert eine Callback-Funktion, die aufgerufen wird, wenn das Blueprint bei der Anwendung registriert wird |
| record_once(func) | Wie record, wird jedoch nur einmal ausgeführt, wenn das Blueprint mehrmals registriert wird |
| make_setup_state(app, options) | Erstellt ein Zustandsobjekt für die Blueprint-Registrierung |
| send_static_file(filename) | Sendet eine Datei aus dem statischen Ordner des Blueprints |
| open_resource(resource, mode="rb") | Öffnet eine Ressourcendatei unter dem Stammpfad des Blueprints |
Optionsparameter beim Registrieren des Blueprints
Rufen Sieapp.register_blueprint(bp, **options) auf.Beim Aufruf können Sie übergeben:
| Parameter | Beschreibung |
|---|---|
| url_prefix | URL-Präfix des Blueprints überschreiben |
| subdomain | Subdomain des Blueprints überschreiben |
| url_defaults | URL-Standardwerte des Blueprints überschreiben |
| name | Blueprint umbenennen (derselbe Blueprint kann mehrmals registriert werden, jedes Mal mit einem anderen Namen) |
Codebeispiele
Beispiel
from flask import Blueprint, render_template
# Blueprint erstellen
bp = Blueprint("blog", __name__,
url_prefix="/blog",
template_folder="templates",
static_folder="static")
# Routen registrieren
@bp.route("/")
def index():
return render_template("blog/index.html")
@bp.route("/<int:post_id>")
def show(post_id):
return f"Beitrag {post_id} anzeigen"
# Blueprint-Hooks
@bp.before_request
def check_login():
# Gilt nur für /blog/*-Routen
pass
# In der App registrieren
# app.register_blueprint(bp)
# Blueprint erstellen
bp = Blueprint("blog", __name__,
url_prefix="/blog",
template_folder="templates",
static_folder="static")
# Routen registrieren
@bp.route("/")
def index():
return render_template("blog/index.html")
@bp.route("/<int:post_id>")
def show(post_id):
return f"Beitrag {post_id} anzeigen"
# Blueprint-Hooks
@bp.before_request
def check_login():
# Gilt nur für /blog/*-Routen
pass
# In der App registrieren
# app.register_blueprint(bp)