Outils pour utilisateurs

Outils du site


Panneau latéral

Plan du Site:

python:flask:conception_par_modules

Conception par modules

But: rassembler dans un même dossier les blueprints, les modèles, les templates nécessaire à une unité logique de l'application, et appeler ça un “module”.

Par exemple, une application peut être divisée en plusieurs “modules” :

  • main
  • articles
  • forum
  • users
  • … etc …

Arboresence

/mywebsite
    /app
        /modules
        
            /articles            # module "Articles"
                /models          # modèles du module
                /static          # assets du module (images, css, etc)
                /templates       # templates du module
                articles.py      # code du module
                
            /main                # module "Main"
                /models          # modèles du module
                /static          # assets du module (images, css, etc)
                /templates       # templates du module
                main.py          # code du module
                
            /users               # module "Users"
                /models          # modèles du module
                /static          # assets du module (images, css, etc)
                /templates       # templates du module
                users.py         # code du module
                
        /static                  # assets de base de l'application
            /bootstap
            /chartjs
            /css
                styles.css
            /img
            /js
                
        /templates               # templates de base de l'application
            base.html.j2
            
        __init__.py              # code principal de l'application
    /venv
    .env

Base de l'application

/app/__init__.py

from flask import Flask
from app.modules.articles.articles import articles
from app.modules.main.main         import main
from app.modules.users.users       import users
 
app = Flask(__name__)
 
app.register_blueprint(articles, url_prefix='/articles')
app.register_blueprint(main,     url_prefix='/')
app.register_blueprint(users,    url_prefix='/users')

/app/templates/base.html.j2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	{% block meta %}{% endblock %}
	{% block css %}{% endblock %}
</head>
<body>
    <h1>Test</h1>
	{% block content %}{% endblock %}
    {% block js %}{% endblock %}
</body>
</html>

Module "Main"

/app/modules/main/main.py

from flask import Blueprint
from flask import render_template
 
main = Blueprint("main", __name__,
    static_folder="static",
    template_folder="templates"
)
 
@main.route("/", methods=['GET'])
def home():
    return render_template("main.home.html.j2")

/app/modules/main/templates/main.home.html.j2

{% extends 'base.html.j2' %}
 
{% block content %}
<p>Module main : home</p>
{% endblock %}

Module "Articles"

/app/modules/articles/articles.py

from flask import Blueprint
from flask import render_template
 
articles = Blueprint("articles", __name__,
    static_folder="static",
    template_folder="templates"
)
 
@articles.route("/", methods=['GET'])
def home():
    return render_template("articles.home.html.j2")

/app/modules/articles/templates/articles.home.html.j2

{% extends 'base.html.j2' %}
 
{% block content %}
<p>Module articles : home</p>
{% endblock %}
python/flask/conception_par_modules.txt · Dernière modification: 2023/10/02 09:15 par marclebrun