Flask Academy · Lezione

Inizializzare le estensioni con init_app

Rimandi il collegamento delle estensioni alla creazione dell'app.

Lezione 3 di 413 passaggi

Inizializzare le estensioni con init_app è una lezione Flask Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Flask Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Flask Academy include 4 lezioni in totale.

Il dilemma delle estensioni

In passato, estensioni come SQLAlchemy ricevevano subito l’app. All’interno di una factory questo non funziona, perché al momento dell’importazione app non esiste ancora. 🤔

Creare senza un’app

La soluzione prevede due passaggi. Per prima cosa, crei l’oggetto dell’estensione a livello di modulo senza passare no app. Per il momento rimane non associato.

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()  # no app yet

Associarla in seguito

In secondo luogo, chiami init_app all’interno della factory, dopo aver creato l’app. In questo modo associa l’estensione a quella specifica istanza.

def create_app():
    app = Flask(__name__)
    db.init_app(app)
    return app

Perché due passaggi

L’oggetto dell’estensione può essere imported anywhere come globale, mentre l’associazione effettiva attende che la factory scelga una configurazione. Il meglio dei due approcci.

Importabile ovunque

Poiché db vive a livello di modulo, i modelli e le viste possono importarlo liberamente senza toccare l’app, evitando importazioni circolari.

from app.extensions import db

Un modulo extensions ordinato

Un modello comune mantiene tutte le estensioni non associate in un unico file extensions.py; poi la factory le importa e inizializza una per una.

db = SQLAlchemy()
migrate = Migrate()
login = LoginManager()

Inizializzarle tutte insieme

All’interno di create_app chiami semplicemente init_app su ogni estensione, passando a tutte la stessa nuova app.

db.init_app(app)
migrate.init_app(app, db)
login.init_app(app)

Associazione per app

Poiché l’associazione avviene nella factory, due app diverse possono eseguire ciascuna init_app sulla stessa classe di estensione in modo indipendente. È ideale per i test.

La configurazione viene letta durante init

Le estensioni leggono impostazioni come l’URI del database durante init_app, quindi imposti questi valori di configurazione prima di associarle.

app.config["SQLALCHEMY_DATABASE_URI"] = uri
db.init_app(app)

Usarla all’interno di un contesto

Dopo init_app, l’estensione ha bisogno di un app context per eseguire effettivamente le query, perché deve sapere con quale app sta comunicando.

with app.app_context():
    db.create_all()

La regola d’oro

Crei l’estensione non associata al momento dell’importazione, poi chiami init_app nella factory. Questa semplice separazione rende possibile l’intero modello. 🔑

Verifica rapida

Perché creare un oggetto di estensione senza un’app e chiamare poi init_app?

Riepilogo

Ha imparato il procedimento in due passaggi: creare le estensioni senza associarle, poi chiamare init_app nella factory. Globali importabili e associazione per app, senza importazioni circolari. 🌟

Gratis per iniziare

Impara Python con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «Inizializzare le estensioni con init_app» è gratuita?

Sì — il testo completo di «Inizializzare le estensioni con init_app» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Flask Academy, passa a CoddyKit PRO. Il corso Flask Academy include 4 lezioni in totale.

Cosa imparerò in «Inizializzare le estensioni con init_app»?

Rimandi il collegamento delle estensioni alla creazione dell'app. Eserciti Flask Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Flask Academy?

Non è richiesta alcuna esperienza precedente. Flask Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Inizializzare le estensioni con init_app»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Flask Academy?

Sì. Ogni lezione Flask Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Problemi con un oggetto app globale
  2. Scrivere una funzione create_app
  3. Inizializzare le estensioni con init_app
  4. Registrare i Blueprint nella factory
← Torna a Flask Academy