Aller au contenu principal

Implémenter la classe Post

Afin de gérer les articles, nous allons maintenant créer une classe que nous allons appeler Post() sur le modèle de notre diagramme UML.

Pour notre classe Post(), nous allons créer un fichier que nous allons nommer post.py.

Implémenter l'affichage de tous les articles

Maintenant que vous avez configuré notre base de données, vous pouvez modifier la fonction d'affichage index() pour afficher tous les articles que vous avez dans votre base de données.

Avant d'entamer la réalisation de cette nouvelle tâche, veuillez penser à : :

  1. déplacer l'intitulé de la tâche dans la colonne "In progress"
  2. créer une nouvelle branche dans Git : git checkout -b show-all-posts

Python a besoin d'un pilote MySQL pour accéder à la base de données MySQL.

pip install mysql-connector-python

Ouvrez le fichier app.py pour apporter les modifications suivantes :

Ensuite, nous allons créer une fonction qui crée une connexion à la base de données et la renvoie. Ajoutez-la directement après l'importation :

Si la ligne except Error as e: génère une erreur, vous pouvez la remplacer par except mysql.connector.Error as e:

Cette fonction get_db_connection() ouvre une connexion au fichier de base de données database.db, et définit ensuite l'attribut row_factory à sqlite3.Row afin que vous puissiez avoir un accès par nom aux colonnes.

Cela signifie que la connexion à la base de données renverra des lignes qui se comporteront comme des dictionnaires Python normaux.

Enfin, la fonction renvoie l'objet de connexion conn que nous allons utiliser pour accéder à la base de données.

Après avoir défini la fonction get_db_connection(), modifier la fonction index() pour qu'elle ressemble à ce qui suit :

Dans cette nouvelle version de la fonction index(), vous ouvrez d'abord une connexion à la base de données en utilisant la fonction get_db_connection() que vous avez définie précédemment.

Ensuite, vous exécutez une requête SQL pour sélectionner toutes les entrées de la table post. Vous implémentez la méthode fetchall() pour récupérer toutes les lignes du résultat de la requête, celle-ci renvoie une liste des articles que vous avez insérés dans la base de données à l'étape précédente.

La liste posts, créée avec la commande posts = [], va contenir tous les objets post créés avec la commande post = Post(...).

Vous fermez la connexion à la base de données en utilisant la méthode close() et vous retournez le résultat du rendu du modèle index.html.

Vous passez également l'objet posts en argument, lequel contient les résultats que vous avez obtenus de la base de données, ce qui vous permettra d'accéder aux articles de blog dans le modèle index.html.

Une fois ces modifications apportées, enregistrez et fermez le fichier app.py.

Maintenant que vous avez passé les articles que vous avez extraits de la base de données au modèle index.html, vous pouvez utiliser une boucle for pour afficher chaque article sur notre page d'index.

Ouvrez le fichier index.html :

Ensuite, modifiez-le pour qu'il ressemble à :

Ici, la syntaxe {% for post in posts %} est une boucle Jinja, qui est similaire à une boucle Python sauf qu'elle doit être fermé plus tard avec la syntaxe {% endfor %}. Vous utilisez cette syntaxe pour boucler sur chaque élément de la liste des messages qui a été passé par la fonction index() dans la ligne : return render_template('index.html', posts=posts).

Dans cette boucle for, vous affichez le titre de l'article dans un titre <h2> à l'intérieur d'une balise <a> (nous allons utiliser plus tard cette balise pour faire un lien vers chaque article individuellement).

Vous affichez le titre en utilisant un délimiteur de variable littérale ({{ ... }}).

Une fois que vous avez fini d'éditer le fichier, enregistrez-le et fermez-le.

Ensuite, naviguez vers la page d'index de notre navigateur. Vous verrez les 2 articles que vous avez ajoutés à la base de données sur notre page.

http://127.0.0.1:5000/

Maintenant que vous avez modifié la fonction d'affichage index() pour afficher tous les articles que vous avez dans la base de données sur la page d'accueil de notre application, nous allons afficher chaque article sur une seule page et permettre aux utilisateurs d'afficher les détails de chaque article.