Application Flask modulaire avec authentification

FlaskFlaskBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons voir comment créer et utiliser des blueprints Flask pour structurer votre application en utilisant des vues. Les blueprints Flask vous permettent de regrouper des vues, du code et des ressources connexes, rendant votre application modulaire et scalable. Nous allons créer une application simple qui inclura la fonction d'authentification d'utilisateurs et la fonctionnalité de publications de blogs.

Note : Vous devez créer le fichier de code vous-même et l'exécuter dans l'environnement. Vous pouvez prévisualiser l'état du service Flask sur Web 5000.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL flask(("Flask")) -.-> flask/DataHandlingGroup(["Data Handling"]) flask(("Flask")) -.-> flask/CoreConceptsGroup(["Core Concepts"]) flask(("Flask")) -.-> flask/DevelopmentToolsGroup(["Development Tools"]) flask/DataHandlingGroup -.-> flask/incoming_request_data("Incoming Request Data") flask/CoreConceptsGroup -.-> flask/application_object("Application Object") flask/CoreConceptsGroup -.-> flask/session_interface("Session Interface") flask/CoreConceptsGroup -.-> flask/json_support("JSON Support") flask/CoreConceptsGroup -.-> flask/class_based_views("Class-Based Views") flask/CoreConceptsGroup -.-> flask/useful_internals("Useful Internals") flask/DevelopmentToolsGroup -.-> flask/blueprint_objects("Blueprint Objects") flask/DevelopmentToolsGroup -.-> flask/command_line_interface("Command Line Interface") subgraph Lab Skills flask/incoming_request_data -.-> lab-136337{{"Application Flask modulaire avec authentification"}} flask/application_object -.-> lab-136337{{"Application Flask modulaire avec authentification"}} flask/session_interface -.-> lab-136337{{"Application Flask modulaire avec authentification"}} flask/json_support -.-> lab-136337{{"Application Flask modulaire avec authentification"}} flask/class_based_views -.-> lab-136337{{"Application Flask modulaire avec authentification"}} flask/useful_internals -.-> lab-136337{{"Application Flask modulaire avec authentification"}} flask/blueprint_objects -.-> lab-136337{{"Application Flask modulaire avec authentification"}} flask/command_line_interface -.-> lab-136337{{"Application Flask modulaire avec authentification"}} end

Créer un blueprint

Commencez par créer un blueprint pour notre application. Ce blueprint sera nommé 'auth' et gérera les vues liées à l'authentification des utilisateurs. Nous définirons notre blueprint dans un module séparé nommé flaskr/auth.py.

## 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

## Créez un blueprint nommé 'auth'
bp = Blueprint('auth', __name__, url_prefix='/auth')

Enregistrer le blueprint

Après avoir créé le blueprint, nous devons l'enregistrer avec notre application. Cela se fait dans la fonction de fabrique d'application dans flaskr/__init__.py.

## flaskr/__init__.py

def create_app():
    app =...
    ## code existant omis

    ## Importez et enregistrez le blueprint
    from. import auth
    app.register_blueprint(auth.bp)

    return app

Implémenter la vue d'inscription

Maintenant, implémentons la vue d'inscription dans flaskr/auth.py. Cette vue affichera un formulaire d'inscription et traitera la soumission du formulaire.

## 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 = 'Le nom d\'utilisateur est requis.'
        elif not password:
            error = 'Le mot de passe est requis.'

        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"L'utilisateur {username} est déjà enregistré."
            else:
                return redirect(url_for("auth.login"))

        flash(error)

    return render_template('auth/register.html')

Implémenter la vue de connexion

Ensuite, nous allons implémenter la vue de connexion dans flaskr/auth.py. Cette vue gérera la fonctionnalité de connexion des utilisateurs.

## 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 = 'Nom d\'utilisateur incorrect.'
        elif not check_password_hash(user['password'], password):
            error = 'Mot de passe incorrect.'

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

        flash(error)

    return render_template('auth/login.html')

Implémenter la vue de déconnexion

Ajoutons maintenant une vue de déconnexion dans flaskr/auth.py. Cette vue gérera la fonctionnalité de déconnexion des utilisateurs.

## flaskr/auth.py

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

Implémenter le décorateur de connexion requise

Nous aurons également besoin d'un décorateur pour protéger nos vues qui nécessitent qu'un utilisateur soit connecté. Ce décorateur sera implémenté dans flaskr/auth.py.

## 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

Récapitulatif

Dans ce laboratoire, nous avons appris à utiliser les blueprints Flask pour structurer notre application. Nous avons créé un blueprint pour l'authentification des utilisateurs et implémenté les vues d'inscription, de connexion et de déconnexion. Nous avons également implémenté un décorateur pour protéger les vues qui nécessitent qu'un utilisateur soit connecté. Grâce à ces connaissances, vous pouvez désormais structurer vos applications Flask de manière modulaire et scalable.