Mezzanine et Monkey patching

28 Avr

Aujourd'hui je vais vous parler du CMS Mezzanine et du Monkey patching (technique permettant d'overrider du code sans toucher au code source), dans mezzanine  plusieurs façons existents  et l'une d'entre elle est le Monkey Patching.

Comment et quand utiliser le monkey patching

Dans cet exemple je vais faire quelque chose qui peut être utile, comme ajouter un nouveau champ même s'il est possible dans ce cas nous pouvons utiliser field injection, mais dans le cas où nous voudrions par exemple rendre un champ de base obligatoire à non obligatoire et bien c'est là que le monkey patching peut être utilisé.
Dans ce premier exemple je vais rendre dans le type de page Gallery le champ file plus obligatoire, dans le fichier models.py:

from mezzanine.galleries.models import GalleryImage
GalleryImage._meta.get_field('file').blank = True

Dans cet exemple il suffit d'appeler le modèle et changer l'attribut blank du champ file en passant par la fonction get_field() de _meta, ne pas oublier par la suite de  créer une migration car le modèle GalleryImage a changé en tapant :

python manage.py makemigration Gallery
python manage.py migrate Gallery

Un autre exemple serait de rajouter un champ dans le modèle GalleryImage:

from mezzanine.galleries.models import GalleryImage
GalleryImage.add_to_class('sous_titre', models.CharField(max_length=250,blank=True))

Dans cet exemple nous rajoutons directement un champ "sous_titre" à la volée via la fonction du modèle add_to_class(), elle permet d'ajouter un attribut de classe au modèle en spécifiant un objet field pour le type de champ, là encore il faut faire une migration pour que les changements soient pris en compte.

Dans tous ces exemples nous n'avons pas eu besoin de changer le code source de Mezzanine, le monkey patch et vraiment une solution efficace pour faire ce genre de chose.
Biensur il est possible de faire bien plus que ça et cette solution n'est pas liée qu'au CMS Mezzanine, mais aux languages dynamiques en général

Publié le: Jeudi 28 avril 2016
blog comments powered by Disqus
Monter

© Circonflex-studio - Tous droits réservés - Mentions legales
Développeur web indépendant / Webdesigner / Intégrateur
Nice - Cannes - Monaco - Antibes - côte d'azur | site valide HTML 5

Ce site à été développé en Python avec le framework Django

"http://www.cssawards.net/nominee/circonflex-studio/"