Flask-Grundkonzepte

Im vorherigen Kapitel haben wir gelernt, wie man unsere erste Flask-Anwendung erstellt. In diesem Kapitel sehen wir uns einige grundlegende Konzepte von Flask genauer an.

Das Verständnis der grundlegenden Konzepte von Flask ist sehr wichtig für die Entwicklung effizienter Webanwendungen.

Das Folgende ist eine detaillierte Analyse der wichtigsten grundlegenden Konzepte von Flask:

  • RoutingRouting ist die Zuordnung von URLs zu Python-Funktionen. Flask ermöglicht es Ihnen, Routen zu definieren, sodass beim Zugriff auf eine bestimmte URL die entsprechende Funktion aufgerufen wird.

  • View-FunktionView-Funktionen sind Python-Funktionen, die Anfragen verarbeiten und Antworten zurückgeben. Sie erhalten typischerweise ein Request-Objekt als Parameter und geben ein Response-Objekt zurück.

  • Request-ObjektDas Request-Objekt enthält Informationen, die vom Client gesendet werden, wie z. B. die Request-Methode, URL, Request-Header, Formulardaten und mehr.

  • Response-ObjektDas Response-Objekt enthält Informationen, die an den Client gesendet werden, wie z. B. Statuscode, Response-Header, Response-Body und mehr.

  • TemplatesFlask verwendet die Jinja2-Template-Engine, um HTML-Templates zu rendern. Templates ermöglichen es Ihnen, Python-Code in HTML einzubetten und so dynamisch Webseiten zu generieren.

  • Anwendungsfabrik: Die Anwendungsfabrik ist eine Python-Funktion, die eine Flask-Anwendungsinstanz erstellt und zurückgibt. Dadurch können Sie Ihre Anwendung konfigurieren und initialisieren, und Sie können mehrere Anwendungsinstanzen erstellen.

  • KonfigurationsobjektEine Flask-Anwendung hat ein Konfigurationsobjekt, mit dem Sie verschiedene Konfigurationsoptionen festlegen können, wie z. B. Datenbankverbindungszeichenfolgen, Debug-Modus und mehr.

  • BlueprintBlueprints sind eine Möglichkeit, Code in Flask zu organisieren, sodass Sie zusammengehörige View-Funktionen, Templates und statische Dateien gruppieren und sie in mehreren Anwendungen wiederverwenden können.

  • Statische DateienStatische Dateien sind Dateien, die nicht serverseitig ausgeführt werden, wie z. B. CSS-, JavaScript- und Bilddateien. Flask bietet eine einfache Möglichkeit, diese Dateien bereitzustellen.

  • ErweiterungenFlask hat viele Erweiterungen, die zusätzliche Funktionalität hinzufügen können, wie z. B. Datenbankintegration, Formularvalidierung, Benutzerauthentifizierung und mehr.

  • SitzungFlask verwendet Client-Sitzungen, um Benutzerinformationen zu speichern, wodurch Sie sich den Status des Benutzers merken können, während dieser Ihre Anwendung durchsucht.

  • FehlerbehandlungFlask ermöglicht es Ihnen, Fehlerbehandlungsfunktionen zu definieren, die aufgerufen werden, wenn bestimmte Fehler auftreten.

1. Routing

Routing ist die Zuordnung von URLs zu Python-Funktionen. Flask ermöglicht es Ihnen, Routen zu definieren, sodass Flask, wenn ein Benutzer auf eine bestimmte URL zugreift, die entsprechende View-Funktion aufruft, um die Anfrage zu bearbeiten.

Beispiel

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'Willkommen auf der Startseite!'

@app.route('/about')
def about():
    return 'Dies ist die About-Seite.'
  • @app.route('/'): Die Root-URL zuordnen/aufhomeFunktion.
  • @app.route('/about'): bildet ab/aboutURL wird zugeordnet zuaboutFunktion.

2. View-Funktionen

View-Funktionen sind Python-Funktionen, die Anfragen verarbeiten und Antworten zurückgeben. Sie erhalten normalerweise ein Request-Objekt als Parameter und geben ein Response-Objekt zurück oder direkt einen String, HTML oder andere Inhalte zurück.

Beispiel

from flask import request

@app.route('/greet/<name>')
def greet(name):
    return f'Hello, {name}!'

Die greet-Funktion empfängt den Parameter name aus der URL und gibt eine String-Antwort zurück.

3. Request-Objekt

Das Request-Objekt enthält Informationen, die vom Client gesendet wurden, einschließlich der Request-Methode, URL, Request-Header, Formulardaten und mehr. Flask stellt das Request-Objekt bereit, um auf diese Informationen zuzugreifen.

Beispiel

from flask import request

@app.route('/submit', methods=['POST'])
def submit():
    username = request.form.get('username')
    return f'Hello, {username}!'

request.form.get('username')Ruft das Feld username aus den Formulardaten in einer POST-Anfrage ab.

4. Response-Objekt

Das Response-Objekt enthält Informationen, die an den Client gesendet werden, einschließlich Statuscode, Response-Header und Response-Body. Standardmäßig behandelt Flask Zeichenketten und HTML direkt als Response-Body.

Beispiel

from flask import make_response

@app.route('/custom_response')
def custom_response():
    response = make_response('This is a custom response!')
    response.headers['X-Custom-Header'] = 'Value'
    return response

make_responseErstellt ein benutzerdefiniertes Response-Objekt und setzt den Response-Header X-Custom-Header.

5. Vorlagen

Flask verwendet die Jinja2-Template-Engine, um HTML-Vorlagen zu rendern. Vorlagen ermöglichen es Ihnen, Python-Code in HTML einzubetten und dadurch dynamisch Webseiteninhalte zu generieren.

Beispiel

from flask import render_template

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)

Vorlagendatei (templates/hello.html):

Beispiel

<!DOCTYPE html>
<html>
<head>
    <title>Hallo</title>
</head>
<body>
    <h1>Hallo, {{ name }}!</h1>
</body>
</html>

6. Anwendungsfabrik

Eine Anwendungsfabrik ist eine Python-Funktion, die verwendet wird, um Flask-Anwendungsinstanzen zu erstellen und zu konfigurieren. Dieser Ansatz ermöglicht es Ihnen, mehrere Anwendungsinstanzen zu erstellen oder Anwendungen unter verschiedenen Konfigurationen zu initialisieren.

Beispiel

from flask import Flask

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config_name)

    from . import routes
    app.register_blueprint(routes.bp)

    return app

Die Funktion create_app erstellt eine Flask-Anwendungsinstanz und lädt die Konfiguration aus einem Konfigurationsobjekt.

7. Konfigurationsobjekte

Das Konfigurationsobjekt wird verwendet, um verschiedene Konfigurationsoptionen für die Anwendung festzulegen, wie Datenbankverbindungszeichenfolgen, Debug-Modus und mehr. Sie können eine Flask-Anwendung konfigurieren, indem Sie Werte direkt festlegen oder eine Konfigurationsdatei laden.

Beispiel

class Config:
    DEBUG = True
    SECRET_KEY = 'mysecretkey'
    SQLALCHEMY_DATABASE_URI = 'sqlite:///mydatabase.db'

app.config.from_object(Config)Lädt die Konfigurationselemente aus der Klasse Config in die Anwendungskonfiguration.

8. Blueprints

Blueprints sind eine Möglichkeit, Code in Flask zu organisieren. Sie ermöglichen es Ihnen, zusammengehörige View-Funktionen, Templates und statische Dateien zu gruppieren, und sie können in mehreren Anwendungen wiederverwendet werden.

Beispiel

from flask import Blueprint

bp = Blueprint('main', __name__)

@bp.route('/')
def home():
    return 'Home Page'

Blueprint registrieren (app/__init__.py):

Beispiel

from flask import Flask
from .routes import bp as main_bp

def create_app():
    app = Flask(__name__)
    app.register_blueprint(main_bp)
    return app

9. Statische Dateien

Statische Dateien sind Dateien, die nicht serverseitig ausgeführt werden, wie CSS-, JavaScript- und Bilddateien. Flask bietet eine einfache Möglichkeit, diese Dateien bereitzustellen.

Beispiel für den Zugriff auf statische Dateien:

<link rel="stylesheet" type="text/css" href="{{ url_for(.html'static', filename='style.css') }}">

Verzeichnis für statische Dateien:Legen Sie statische Dateien im Ordner static ab, und Flask wird sie automatisch bereitstellen.

10. Erweiterungen

Flask hat viele Erweiterungen, die zusätzliche Funktionalität hinzufügen können, wie Datenbankintegration, Formularvalidierung, Benutzerauthentifizierung und mehr. Diese Erweiterungen bieten fortgeschrittenere Funktionen und Integrationen von Drittanbietern.

Beispiel

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
db = SQLAlchemy(app)

SQLAlchemy: Erweiterungen für die Datenbankintegration.

11. Sitzungen

Flask verwendet Client-Sitzungen, um Benutzerinformationen zu speichern, um den Zustand des Benutzers zu merken, während er durch die Anwendung navigiert. Sitzungsdaten werden im Cookie des Clients gespeichert und serverseitig signiert und verschlüsselt.

Beispiel

from flask import session

# Automatisch generierter geheimer Schlüssel
app.secret_key = 'your_secret_key_here'

@app.route('/set_session/<username>')
def set_session(username):
    session['username'] = username
    return f'Sitzung gesetzt für {username}'

@app.route('/get_session')
def get_session():
    username = session.get('username')
    return f'Hello, {username}!' if username else 'No session data'

Das Session-Objekt wird verwendet, um Sitzungsdaten zu speichern und abzurufen.

Du kannst Pythons integriertes secrets-Modul verwenden, um einen starken, zufälligen Secret Key zu generieren.

python3 -c 'import secrets; print(secrets.token_hex())'

12. Fehlerbehandlung

Flask ermöglicht es dir, Fehlerbehandlungsfunktionen zu definieren, die aufgerufen werden, wenn bestimmte Fehler auftreten. Du kannst Fehlerseiten oder die Behandlungslogik anpassen.

Beispiel

@app.errorhandler(404)
def page_not_found(e):
    return 'Page not found', 404

@app.errorhandler(500)
def internal_server_error(e):
    return 'Internal server error', 500

@app.errorhandler(404)Definiere eine Handler-Funktion für den 404-Fehler und gib eine benutzerdefinierte Fehlerseite zurück.

Weitere Erweiterungen