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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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)
    
  5. /static: Aquest directori conté fitxers estàtics com CSS, JavaScript i imatges.

  6. /templates: Aquest directori conté les plantilles HTML que s'utilitzen per renderitzar les pàgines web.

  7. /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

  1. Crea els directoris i fitxers necessaris segons l'estructura proporcionada.
  2. Implementa el codi bàsic en cada fitxer com s'ha descrit.
  3. Executa l'aplicació utilitzant run.py i assegura't que tot funcioni correctament.

Solució

  1. 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
    
  2. 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"
      
  3. 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

Mòdul 2: Conceptes Bàsics de Flask

Mòdul 3: Formularis i Entrada d'Usuari

Mòdul 4: Integració de Bases de Dades

Mòdul 5: Autenticació d'Usuaris

Mòdul 6: Conceptes Avançats de Flask

Mòdul 7: APIs RESTful amb Flask

Mòdul 8: Desplegament i Producció

Mòdul 9: Proves i Millors Pràctiques

Mòdul 10: Extensions i Ecosistema de Flask

© Copyright 2024. Tots els drets reservats