En aquest tema, aprendrem com gestionar fitxers estàtics en una aplicació Flask. Els fitxers estàtics inclouen imatges, fulls d'estil CSS, fitxers JavaScript, i qualsevol altre tipus de fitxer que no canviï dinàmicament.
Conceptes Clau
- Fitxers Estàtics: Fitxers que no canvien dinàmicament i són servits directament al client.
- Directori
static
: El directori predeterminat on Flask busca fitxers estàtics. - URL per a Fitxers Estàtics: La manera com Flask genera URLs per accedir als fitxers estàtics.
Estructura del Directori
Per defecte, Flask espera que els fitxers estàtics es trobin en un directori anomenat static
dins del directori principal de l'aplicació. La estructura típica d'una aplicació Flask amb fitxers estàtics és la següent:
Accés als Fitxers Estàtics
Flask proporciona una manera senzilla d'accedir als fitxers estàtics utilitzant la funció url_for
. Aquesta funció genera la URL correcta per a un fitxer estàtic.
Exemple de Codi
A continuació, es mostra un exemple de com servir fitxers estàtics en una aplicació Flask:
app.py
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('index.html') if __name__ == '__main__': app.run(debug=True)
templates/index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>My Flask App</title> <link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}"> </head> <body> <h1>Welcome to My Flask App</h1> <img src="{{ url_for('static', filename='images/logo.png') }}" alt="Logo"> <script src="{{ url_for('static', filename='js/scripts.js') }}"></script> </body> </html>
En aquest exemple, utilitzem la funció url_for
per generar les URLs dels fitxers CSS, JavaScript i imatges.
Exercici Pràctic
Objectiu
Crear una aplicació Flask que serveixi una pàgina HTML amb un full d'estil CSS i una imatge.
Passos
-
Crea l'estructura de directoris següent:
/my_flask_app /static /css styles.css /images logo.png /templates index.html app.py
-
Escriu el codi per a
app.py
:from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('index.html') if __name__ == '__main__': app.run(debug=True)
-
Escriu el codi per a
templates/index.html
:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>My Flask App</title> <link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}"> </head> <body> <h1>Welcome to My Flask App</h1> <img src="{{ url_for('static', filename='images/logo.png') }}" alt="Logo"> </body> </html>
-
Escriu el codi per a
static/css/styles.css
:body { font-family: Arial, sans-serif; background-color: #f0f0f0; text-align: center; padding: 50px; } h1 { color: #333; } img { width: 200px; height: auto; }
-
Afegeix una imatge anomenada
logo.png
al directoristatic/images
.
Solució
Després de completar els passos anteriors, executa l'aplicació Flask amb python app.py
i obre el navegador a http://127.0.0.1:5000/
. Hauries de veure una pàgina amb un títol, una imatge i un estil aplicat des del fitxer CSS.
Resum
En aquesta secció, hem après com gestionar fitxers estàtics en una aplicació Flask. Hem vist com organitzar els fitxers estàtics en el directori static
, com generar URLs per a aquests fitxers utilitzant url_for
, i hem creat una aplicació pràctica per reforçar aquests conceptes. Ara estem preparats per avançar cap a la gestió de formularis i entrada d'usuari en el següent mòdul.
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