Modulare Flask-Anwendung mit Authentifizierung

FlaskFlaskBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir Ihnen zeigen, wie Sie Flask-Blueprints erstellen und verwenden, um Ihre Anwendung mit Views zu strukturieren. Flask-Blueprints ermöglichen es Ihnen, verwandte Views, Code und Ressourcen zusammen zu gruppieren, was Ihre Anwendung modular und skalierbar macht. Wir werden eine einfache Anwendung erstellen, die Benutzerauthentifizierung und Blogbeiträgefunktionen umfasst.

Hinweis: Sie müssen die Code-Datei selbst erstellen und in der Umgebung ausführen. Sie können den Status des Flask-Diensts auf Web 5000 vorab anzeigen.

Erstellen eines Blueprints

Lassen Sie uns beginnen, indem wir ein Blueprint für unsere Anwendung erstellen. Dieses Blueprint wird 'auth' genannt und wird die mit der Benutzerauthentifizierung verbundenen Views verarbeiten. Wir werden unser Blueprint in einem separaten Modul namens flaskr/auth.py definieren.

## flaskr/auth.py

import functools
from flask import Blueprint, flash, g, redirect, render_template, request, session, url_for
from werkzeug.security import check_password_hash, generate_password_hash
from flaskr.db import get_db

## Erstellen eines Blueprints namens 'auth'
bp = Blueprint('auth', __name__, url_prefix='/auth')

Registrieren des Blueprints

Nachdem das Blueprint erstellt wurde, müssen wir es mit unserer Anwendung registrieren. Dies geschieht in der Anwendungsfabrikfunktion in flaskr/__init__.py.

## flaskr/__init__.py

def create_app():
    app =...
    ## vorhandener Code weggelassen

    ## Importieren und Registrieren des Blueprints
    from. import auth
    app.register_blueprint(auth.bp)

    return app

Implementieren der Registrierungsansicht

Nun implementieren wir die Registrierungsansicht in flaskr/auth.py. Diese Ansicht wird ein Registrierungsformular anzeigen und die Formularübermittlung verarbeiten.

## flaskr/auth.py

@bp.route('/register', methods=('GET', 'POST'))
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        db = get_db()
        error = None

        if not username:
            error = 'Username is required.'
        elif not password:
            error = 'Password is required.'

        if error is None:
            try:
                db.execute(
                    "INSERT INTO user (username, password) VALUES (?,?)",
                    (username, generate_password_hash(password)),
                )
                db.commit()
            except db.IntegrityError:
                error = f"User {username} is already registered."
            else:
                return redirect(url_for("auth.login"))

        flash(error)

    return render_template('auth/register.html')

Implementieren der Login-Ansicht

Als nächstes implementieren wir die Login-Ansicht in flaskr/auth.py. Diese Ansicht wird die Benutzerauthentifizierungsfunktion verarbeiten.

## flaskr/auth.py

@bp.route('/login', methods=('GET', 'POST'))
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        db = get_db()
        error = None
        user = db.execute(
            'SELECT * FROM user WHERE username =?', (username,)
        ).fetchone()

        if user is None:
            error = 'Incorrect username.'
        elif not check_password_hash(user['password'], password):
            error = 'Incorrect password.'

        if error is None:
            session.clear()
            session['user_id'] = user['id']
            return redirect(url_for('index'))

        flash(error)

    return render_template('auth/login.html')

Implementieren der Logout-Ansicht

Fügen wir nun eine Logout-Ansicht in flaskr/auth.py hinzu. Diese Ansicht wird die Benutzerabmeldungsfunktion verarbeiten.

## flaskr/auth.py

@bp.route('/logout')
def logout():
    session.clear()
    return redirect(url_for('index'))

Implementieren des Login-Required-Dekorators

Wir werden auch einen Dekorator benötigen, um unsere Views zu schützen, die ein angemeldeten Benutzer erfordern. Dieser Dekorator wird in flaskr/auth.py implementiert.

## flaskr/auth.py

def login_required(view):
    @functools.wraps(view)
    def wrapped_view(**kwargs):
        if g.user is None:
            return redirect(url_for('auth.login'))

        return view(**kwargs)

    return wrapped_view

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Flask-Blueprints verwendet, um unsere Anwendung zu strukturieren. Wir haben ein Blueprint für die Benutzerauthentifizierung erstellt und Registrierungs-, Login- und Logout-Ansichten implementiert. Wir haben auch einen Dekorator implementiert, um Ansichten zu schützen, die einen angemeldeten Benutzer erfordern. Mit diesen Kenntnissen können Sie nun Ihre Flask-Anwendungen auf modular und skalierbare Weise strukturieren.