En aquest tema, explorarem l'estructura típica d'una aplicació Flask. Entendre com organitzar els fitxers i directoris és crucial per mantenir el codi net, escalable i fàcil de mantenir. A mesura que la teva aplicació creix, una bona estructura t'ajudarà a gestionar la complexitat.
Estructura Bàsica d'una Aplicació Flask
Una aplicació Flask bàsica pot tenir una estructura com la següent:
my_flask_app/ │ ├── app.py ├── config.py ├── requirements.txt ├── run.py ├── /static │ ├── css │ ├── js │ └── images ├── /templates │ ├── base.html │ └── index.html └── /app ├── __init__.py ├── models.py ├── views.py ├── forms.py └── /blueprints ├── __init__.py └── example_blueprint.py
Descripció dels Fitxers i Directoris
-
app.py: Aquest fitxer conté la instància principal de l'aplicació Flask. Aquí és on inicialitzem l'aplicació i carreguem les configuracions necessàries.
from flask import Flask app = Flask(__name__) app.config.from_object('config') from app import views
-
config.py: Aquest fitxer conté les configuracions de l'aplicació, com ara les claus secretes, les configuracions de la base de dades, etc.
import os class Config: SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess' SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///app.db' SQLALCHEMY_TRACK_MODIFICATIONS = False
-
requirements.txt: Aquest fitxer llista totes les dependències del projecte. És útil per recrear l'entorn de desenvolupament en altres màquines.
Flask==2.0.1 Flask-SQLAlchemy==2.5.1 Flask-WTF==0.15.1
-
run.py: Aquest fitxer s'utilitza per executar l'aplicació. Normalment conté una crida a
app.run()
.from app import app if __name__ == '__main__': app.run(debug=True)
-
/static: Aquest directori conté fitxers estàtics com CSS, JavaScript i imatges.
-
/templates: Aquest directori conté les plantilles HTML que s'utilitzen per renderitzar les pàgines web.
-
/app: Aquest directori conté el codi de l'aplicació. Inclou subdirectoris i fitxers per a models, vistes, formularis i blueprints.
-
init.py: Aquest fitxer inicialitza el paquet
app
i registra les vistes i blueprints.from flask import Flask app = Flask(__name__) app.config.from_object('config') from app import views
-
models.py: Aquest fitxer conté les definicions dels models de la base de dades.
from app import app from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), index=True, unique=True) email = db.Column(db.String(120), index=True, unique=True)
-
views.py: Aquest fitxer conté les rutes i les funcions de vista.
from app import app from flask import render_template @app.route('/') def index(): return render_template('index.html')
-
forms.py: Aquest fitxer conté les definicions dels formularis utilitzant WTForms.
from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()]) submit = SubmitField('Sign In')
-
/blueprints: Aquest subdirectori conté els blueprints, que són una manera de modularitzar l'aplicació.
-
init.py: Inicialitza el paquet
blueprints
. -
example_blueprint.py: Conté un exemple de blueprint.
from flask import Blueprint example = Blueprint('example', __name__) @example.route('/example') def example_route(): return "This is an example blueprint"
-
-
Exercici Pràctic
Objectiu
Crea una aplicació Flask bàsica amb l'estructura descrita anteriorment.
Passos
- Crea els directoris i fitxers necessaris segons l'estructura proporcionada.
- Implementa el codi bàsic en cada fitxer com s'ha descrit.
- Executa l'aplicació utilitzant
run.py
i assegura't que tot funcioni correctament.
Solució
-
Crea els directoris i fitxers:
mkdir my_flask_app cd my_flask_app touch app.py config.py requirements.txt run.py mkdir static templates app touch app/__init__.py app/models.py app/views.py app/forms.py mkdir app/blueprints touch app/blueprints/__init__.py app/blueprints/example_blueprint.py
-
Implementa el codi:
-
app.py
:from flask import Flask app = Flask(__name__) app.config.from_object('config') from app import views
-
config.py
:import os class Config: SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess' SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///app.db' SQLALCHEMY_TRACK_MODIFICATIONS = False
-
requirements.txt
:Flask==2.0.1 Flask-SQLAlchemy==2.5.1 Flask-WTF==0.15.1
-
run.py
:from app import app if __name__ == '__main__': app.run(debug=True)
-
app/__init__.py
:from flask import Flask app = Flask(__name__) app.config.from_object('config') from app import views
-
app/models.py
:from app import app from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), index=True, unique=True) email = db.Column(db.String(120), index=True, unique=True)
-
app/views.py
:from app import app from flask import render_template @app.route('/') def index(): return render_template('index.html')
-
app/forms.py
:from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()]) submit = SubmitField('Sign In')
-
app/blueprints/__init__.py
:# This file can be left empty or used to initialize the blueprint package
-
app/blueprints/example_blueprint.py
:from flask import Blueprint example = Blueprint('example', __name__) @example.route('/example') def example_route(): return "This is an example blueprint"
-
-
Executa l'aplicació:
python run.py
Visita
http://127.0.0.1:5000/
al teu navegador per veure la teva aplicació en funcionament.
Conclusió
En aquesta secció, hem après com estructurar una aplicació Flask de manera eficient. Hem creat una aplicació bàsica amb una estructura clara i ben organitzada, que ens permetrà escalar i mantenir el nostre projecte amb facilitat. En el següent mòdul, explorarem els conceptes bàsics de Flask, com ara l'enrutament i el mapeig d'URL.
Curs de Desenvolupament Web amb Flask
Mòdul 1: Introducció a Flask
- Què és Flask?
- Configuració del Teu Entorn de Desenvolupament
- Creant la Teva Primera Aplicació Flask
- Entenent l'Estructura d'una Aplicació Flask
Mòdul 2: Conceptes Bàsics de Flask
- Enrutament i Mapeig d'URL
- Gestió de Mètodes HTTP
- Renderització de Plantilles amb Jinja2
- Treballant amb Fitxers Estàtics
Mòdul 3: Formularis i Entrada d'Usuari
Mòdul 4: Integració de Bases de Dades
- Introducció a Flask-SQLAlchemy
- Definició de Models
- Realització d'Operacions CRUD
- Migracions de Bases de Dades amb Flask-Migrate
Mòdul 5: Autenticació d'Usuaris
- Registre d'Usuaris
- Inici i Tancament de Sessió d'Usuaris
- Hashing de Contrasenyes
- Gestió de Sessions d'Usuaris
Mòdul 6: Conceptes Avançats de Flask
- Blueprints per a Aplicacions Grans
- Gestió d'Errors
- Pàgines d'Error Personalitzades
- Registre i Depuració
Mòdul 7: APIs RESTful amb Flask
- Introducció a les APIs RESTful
- Creació de Punts Finals RESTful
- Gestió de Dades JSON
- Autenticació per a APIs
Mòdul 8: Desplegament i Producció
- Configuració de Flask per a Producció
- Desplegament a Heroku
- Desplegament a AWS
- Monitorització i Optimització del Rendiment
Mòdul 9: Proves i Millors Pràctiques
- Proves Unitàries amb Flask
- Proves d'Integració
- Cobertura de Proves
- Millors Pràctiques per al Desenvolupament amb Flask