Bienvenue sur agprog.net

Je m'appelle Thomas MELIN


Je suis heureux de te faire partager ce qui me fait vibrer au sein de ce petit blog.

Il n'a pas d'autres prétentions que d'être pour moi une sorte de wiki ( OK BOOMER ! ) sur lequel je peux m'appuyer lorsque la mémoire me fait défaut et qui, par extension peut t'être utile si tu rencontres les mêmes difficultés que moi, ou que tout simplement tu as le même besoin ou la même envie.

Je profite également de cette petite plateforme pour te faire partager ma passion pour le sport nature et le triathlon.

Bienvenue sur ces quelques pages. C'est sans pub et sans commentaires.

Derniers articles du blog

2026

18

fév.

Intégrer fontawesome sur un site via sass

0

Pour intégrer fontawesome sur votre site internet, vous pouvez vous y prendre de différentes manières.

Appeler les bibliothèques d'icônes de fontawesome dans le header par des liens link href :

 < link href="/your-path-to-fontawesome/css/fontawesome.css" rel="stylesheet" >
< link href="/your-path-to-fontawesome/css/brand.css" rel="stylesheet" >
< link href="/your-path-to-fontawesome/css/solid.css" rel="stylesheet" >

Ce n'est pas l'option que je trouve la plus élégante, d'autant que si l'on travaille avec sass, il y a une manière d'encapsuler fontawesome directement dans app.scss.

Intégrer les bibliothèques d'icônes dans app.scss

 La méthode que je préfère est d'utiliser sass pour intégrer les packs d'icônes directement dans les css au moment du build des feuilles de styles. Cela permet d'une part de ne pas surcharger inutilement les déclarations dans la balise head et d'autre part de tout gérer dans le app.scss.

La méthode est simple.

Dans un premier temps, il faut télécharger le zip de fontawesome pour scss, il contient deux répertoires, un qui s'appelle scss sur lequel nous allons faire les déclarations voulues et l'autre webfonts contenant les polices proprement dites en svg.

 Déclarer les chemins des bibliothèques de polices.

Ensuite nous allons nous placer dans notre fichier de configuration app.scss, ou nous allons déclarer dans l'import les fichiers scss dont nous aurons besoin.

Enfin, dans le fichier variables.scss, nous allons déclarer la variable $fa-font-path avec la valeur du chemin du répertoire webfonts.

Ce qui se résume si l'on mets toutes ces déclarations dans le fichier app.scss à cela.

 

@import "./fontawesome/scss/fontawesome";
@import "./fontawesome/scss/solid";
Puis dans le fichier _variables.scss.
 $fa-font-path: '../webfonts';

Il ne vous reste plus qu'à lancer un watch ou un build sur votre sass préféré.

 

Article rédigé par GuruGeek le mercredi 18 février 2026

2026

18

fév.

Relations one to many et many to many avec Sql Alchemy

0

 Gestion des relations one to many et many to many avec SQL Alchemy

 

Introduction : 

Pour ceux qui ne connaissent pas, SQLAlchemy est un ORM basique standard de la librairie de python. Dans la nouvelle version on utilise les annotations pour définir les types de données et la fonction mapped pour les créer.

 

Exemple:

    Relation one to many

        Pour un utilisateur ayant plusieurs posts 


from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship

from sqlalchemy import ForeignKey

from typing import List

class Base(DeclarativeBase):

    pass



class User(Base):

    __tablename__ = "users"

    id: Mapped[int] = mapped_column(primary_key=True)

    name: Mapped[str]

    posts: Mapped[List["Post"]] = relationship(

        back_populates="author",

        cascade="all,

        delete-orphan"

 

class Post(Base):

    __tablename__ = "posts"

    id: Mapped[int] = mapped_column(primary_key=True)

    title: Mapped[str]

    user_id: Mapped[int] = mapped_column(ForeignKey("users.id"))

    author: Mapped["User"] = relationship(back_populates="posts")

 Sur le côté gérant la relation plusieurs on doit placer le mot clé ForeignKey, la méthode relationship() doit figurer des deux côtés pour créer la relation.
backpopulates permet de synchroniser les données dans la relation et cascade permet la suppression en cascade si l'utilisateur est supprimé.

Pour utiliser le code on utilise les mots clé add et append :


user = User(name="Alice")

post = Post(title="Hello")

user.posts.append(post)

session.add(user)

session.commit()

 

Relation many to many

On commence par créer une table intermédiaire qui permet d'associer les diffèrentes clés des éléments.Dans l'exemple on associera les tags aux posts:


from sqlalchemy import Table, Column, ForeignKey

post_tag = Table(
"post_tag",
Base.metadata,
Column("post_id", ForeignKey("posts.id"), primary_key=True),
Column("tag_id", ForeignKey("tags.id"), primary_key=True),
)

Ensuite on va modifier les modeles :


from typing import List

class Post(Base):

     __tablename__ = "posts"

     id: Mapped[int] = mapped_column(primary_key=True)

     title: Mapped[str]

     tags: Mapped[List["Tag"]] = relationship(

    secondary=post_tag,

    back_populates="posts" )

 

class Tag(Base):

     __tablename__ = "tags"

     id: Mapped[int] = mapped_column(primary_key=True)

     name: Mapped[str]

     posts: Mapped[List["Post"]] = relationship(

    secondary=post_tag,

    back_populates="tags" )

Son utilisation se fait de la manière suivante


post = Post(title="SQLAlchemy Tips")

tag1 = Tag(name="python")

tag2 = Tag(name="orm")

 

post.tags.extend([tag1, tag2])

session.add(post)

session.commit()

Relation many to many avec données supplémentaires

l'astuce est d'utiliser un modèle d'association à la place d'une simple table d'association.

Dans l'exemple ci-dessous au lieu de la table que nous avons utilisé au dessus, nous utilisons un modèle :


class PostTag(Base):

    __tablename__ = "post_tag"

    post_id: Mapped[int] = mapped_column(ForeignKey("posts.id"), primary_key=True)

    tag_id: Mapped[int] = mapped_column(ForeignKey("tags.id"), primary_key=True)

    extra_data: Mapped[str]

    post: Mapped["Post"] = relationship(back_populates="post_tags")

    tag: Mapped["Tag"] = relationship(back_populates="post_tags")

 

puis: 


class Post(Base):

    ...

    post_tags: Mapped[List["PostTag"]] = relationship(back_populates="post")

 

 

Article rédigé par GuruGeek le mercredi 18 février 2026

2024

28

jan.

Première utilisation de postgresql

0

Après l'installation du paquet PostgreSQL, il va nous falloir modifier les utilisateurs de postgre. En effet, l'utilisateur postgre est l'équivalent de root sous mysql et a tout les pouvoir sur l'ensemble des tables de la base.

Dans un premier temps on change d'utilisateur système.


> sudo -s -u postgres

Ensuite on lance le client postgres


> psql

On crée le nouvel utilisateur


> CREATE USER

On définit les rôles de ce nouvel utilisateur avec


CREATE ROLE WITH

ALTER ROLE WITH

Les options disponibles sont :

SUPERUSER | NOSUPERUSER

CREATEDB | NOCREATEDB

CREATEROLE|NOCREATEROLE

CREATEUSER|NOCREATEUSER

Enfin il nous reste à associer un mot de passe à l'utilisateur.


> ALTER USER WITH ENCRYPTED PASSWORD

Les commandes postgre utiles:


\q quitter postgre

\d liste les bases de données

\dt liste les tables, il est aussi possible d'utiliser les requêtes systèmes.

 

Article rédigé par GuruGeek le dimanche 28 janvier 2024

2024

28

jan.

Nouveau projet Angular

0

 Dans ce petit mémo nous allons voir comment créer un nouveau projet angular.

1ère étape : créer le projet

On créé un projet avec un module partagé ( c'est pourquoi il n'est pas standalone )


ng new routingApp --skip-tests --no-standalone

Article rédigé par GuruGeek le dimanche 28 janvier 2024