Dans le monde Python, de nombreux développeurs apprécient la base de données NoSQL Redis en raison de sa vitesse et de la disponibilité d’un assortiment robuste de bibliothèques clientes. Dans le monde WordPress, Redis est souvent la technologie de prédilection lorsqu’un cache d’objet persistant est nécessaire pour accélérer l’accès aux données du backend.

Vous pouvez réunir ces deux mondes lorsque vous manipulez le contenu de WordPress avec une application Python.

Dans ce tutoriel, nous montrons comment publier du contenu directement sur Redis en construisant une application Python qui utilise la bibliothèque populaire redis-py et comment publier via l’API REST de WordPress.

Qu’est-ce que Redis ?

Redis, ou Remote Dictionary Server, est une base de données NoSQL rapide et un cache en mémoire développé par Salvatore Sanfilippo et maintenu par Redis Ltd. (anciennement Redi Labs). Les versions open source de Redis sont disponibles sous la licence Berkeley Source Distribution (BSD), tandis que Redis Ltd. propose également des versions commerciales du serveur pour les entreprises et le cloud.

Redis se distingue des autres bases de données NoSQL par son mécanisme de stockage des données. Il est généralement appelé stockage de structures de données car il stocke les données avec les mêmes types de données que l’on trouve dans de nombreux langages de programmation, notamment les chaînes de caractères, les ensembles, les listes et les dictionnaires (ou les hachages). Outre la prise en charge de structures simples, Redis prend en charge des structures de données avancées pour des tâches telles que la géolocalisation et le traitement des flux.

Pré-requis pour une application Python

Avant de commencer à créer votre application, vous devez installer localement les trois éléments suivants :

Astuce : vous pouvez facilement créer cet environnement de développement dans Docker en installant le paquet DevKinsta de Kinsta, prêt pour WordPress.

Une fois les pré-requis installés, il est temps de faire fonctionner les choses ensemble. Plus précisément, vous créez une application Python qui prend l’article WordPress d’un utilisateur au format dictionnaire et l’enregistre dans un cache Redis.

Créer une application Python pour stocker un article dans le cache Redis

Le cache Redis est un mécanisme de mise en cache efficace pour les sites web. Il stocke les informations fréquemment demandées pour un accès plus rapide et plus pratique. Le cache stocke les informations dans une structure de données clé-valeur.

Commencez par créer un nouveau dossier pour votre projet, nommé python-redis. Ensuite, démarrez votre terminal de commande, cd pour python-redis, et installez redis-py en exécutant la commande suivante :

pip install redis

Une fois l’installation terminée, créez un nouveau fichier nommé main.py dans le répertoire python-redis. Ouvrez le fichier dans votre éditeur de texte favori pour saisir les blocs de code ci-dessous.

Commencez par importer la bibliothèque redis-py récemment installée et définissez l’adresse de l’hôte et du port Redis :

import redis
redis_host = 'localhost'
redis_port = 6379

Maintenant, définissez les valeurs de l’article WordPress comme des paires clé/valeur dans un dictionnaire. Voici un exemple :

post = {
    'ID': 1,
    'post_author': 1,
    'post_date': '2024-02-05 00:00:00',
    'post_date_gmt': '2024-02-05 00:00:00',
    'post_content': 'Test Post <br/><a href="http://www.my-site.com/">related blog post</a>',
    'post_title': 'My first post',
    'post_excerpt': 'In this post, I will...',
    'post_status': 'publish',
    'comment_status': 'open',
    'ping_status': 'open',
    'post_password': 'my-post-pwd',
    'post_name': 'my-first-post',    
}

Remarque : dans une application réelle, le contenu de l’article proviendrait probablement d’un formulaire de saisie HTML.

Ajoutez au code une fonction redis_dict() qui se connectera à votre serveur Redis local, stockera l’article ci-dessus dans le cache Redis et imprimera les valeurs créées avec succès sur la console :

def redis_dict():
    try:
        r = redis.StrictRedis(host = redis_host, port = redis_port, decode_responses=True)
        r.hset("newPostOne", mapping=post)
        msg = r.hgetall("newPostOne")
        print(msg)
    except Exception as e:
        print(f"Something went wrong {e}")

# Runs the function:
if __name__ == "__main__":
    redis_dict()

À moins que vous n’ayez lancé Redis dans Docker, invoquez l’interface de ligne de commande Redis avec la commande suivante :

redis-cli

Exécutez maintenant votre script Python :

python main.py

L’exécution du script ajoute l’article au stockage de valeurs clés Redis. Vous devriez voir la réponse suivante dans la console de votre terminal :

Sortie de la console montrant l'ajout d'un article de l'application Python au stockage Redis.
Sortie de la console montrant l’ajout d’un article de l’application Python au stockage Redis.

Vous avez réussi à stocker un article dans votre base de données Redis locale.

Maintenant, téléverseons cet article sur votre site WordPress en utilisant l’API REST de WordPress, en le stockant dans la base de données par défaut MariaDB ou MySQL au lieu de Redis.

Téléverser un article vers WordPress à l’aide de l’API REST

L’API REST de WordPress fournit un ensemble de points de terminaison que vous pouvez appeler depuis votre application pour interagir avec WordPress. Nous utilisons le point de terminaison post pour créer un article dans WordPress.

Étape 1 : Définir le mot de passe de l’application dans WordPress

L’API WordPress nécessite un mot de passe d’application pour permettre à votre application d’accéder aux données du site WordPress. Le mot de passe est une clé secrète de 24 caractères, que vous devez inclure dans chaque requête à l’API REST.

Générez un mot de passe d’application sur la page Profil de l’utilisateur du tableau de bord de WordPress. Vous pouvez attribuer un nom convivial à chaque mot de passe d’application, mais vous ne pourrez pas voir le mot de passe lui-même après l’avoir généré (faites donc une copie maintenant) :

Générer un mot de passe d'application dans le tableau de bord de WordPress.
Générer un mot de passe d’application dans le tableau de bord de WordPress.

Étape 2 : Publier sur WordPress avec votre application Python

Tout d’abord, installez la bibliothèque Python requests pour effectuer la requête HTTP à l’API de WordPress. Pour cela, exécutez la commande suivante dans le terminal :

pip install requests

Ensuite, dans votre dossier python-redis, créez un nouveau fichier nommé app.py. Ouvrez ensuite le fichier avec votre éditeur de texte.

Commencez par importer les modules requests, json et base64:

import requests
import json
import base64

Définissez l’URL de base de l’API, ainsi que votre nom d’utilisateur et votre mot de passe WordPress. Pour la variable password, utilisez le mot de passe de l’application que vous avez généré dans WordPress :

url = 'http://localhost/wp-json/wp/v2'
user = '<Your username here>'
password = '<Your application password here>'

Maintenant, joignez user et password, encodez le résultat et passez-le dans les en-têtes de la requête :

creds = user + ":" + password
token = base64.b64encode(creds.encode())
header = {'Authorization': 'Basic ' + token.decode('utf-8')}

Et voici le corps de l’article :

post = {    
    'author': 1,
    'date': '2024-02-05 00:00:00',
    'date_gmt': '2024-02-05 00:00:00',
    'content': 'Test Post <br/><a href="http://www.my-site.com/">related blog post</a>',
    'title': 'My second post',
    'excerpt': 'In this post, I will...',
    'status': 'publish',
    'comment_status': 'open',
    'ping_status': 'open',
    'password': 'my-post-pwd',
    'slug': 'my-second-post',    
}

Configurez la requête POST vers l’API et une commande pour afficher le statut de la réponse :

r = requests.post(url + '/posts', headers=header, json=post)
print(r)

Exécutez votre script avec la commande suivante dans le terminal :

python app.py

Si vous avez reçu une réponse 201 (« Created »), cela signifie que la ressource a bien été ajoutée.

Screenshot of the terminal reporting a 201 response code after posting to WordPress via Python.
Un code de réponse 201 est renvoyé en cas de publication réussie.

Vous pouvez le confirmer dans votre tableau de bord WordPress ou dans la base de données MySQL/MariaDB de votre site.

Utiliser le cache Redis directement dans WordPress

Les sites WordPress peuvent utiliser le cache Redis pour stocker temporairement des objets, tels que des articles, des pages ou des utilisateurs. L’objet peut ensuite être accédé à partir du cache lorsque vous en avez besoin. Cette approche permet de gagner un temps précieux, de réduire la latence et d’améliorer la capacité du site à évoluer et à faire face à un trafic plus important.

Redis pour les clients de Kinsta

Un temps de chargement rapide est essentiel pour une expérience utilisateur agréable, et il y a peu de place pour la sous-performance. C’est pourquoi Kinsta propose Redis en tant que module premium.

Pour les clients qui souhaitent profiter de l’extension Redis, il suffit de contacter le support de Kinsta, et nous nous occuperons du processus d’installation et de la mise en place pour vous.

Installer un plugin Redis

Si vous n’êtes pas client de Kinsta, vous devrez installer une extension dédiée sur votre site WordPress.

Par exemple, installons l’extension Redis Object Cache sur votre site WordPress local.

L'extension Redis Object Cache.
L’extension Redis Object Cache.

Ouvrez le fichier wp-config.php dans un éditeur de texte et ajoutez le code suivant dans la section des variables de configuration personnalisées :

define('WP_REDIS_CLIENT', 'predis');
define('WP_REDIS_HOST', 'localhost');
define('WP_REDIS_PORT', '6379');

Remarque : l’adresse de votre hôte Redis dépend de la configuration de votre serveur.

Naviguez vers Réglages > Redis dans le tableau de bord de WordPress. Vous devriez voir quelque chose de similaire à ceci :

L'extension Redis Object Cache est affiché dans l'onglet Réglages.
L’extension Redis Object Cache est affiché dans l’onglet Réglages.

Le cache Redis a maintenant remplacé avec succès l’ancienne base de données MySQL.

De plus, le site WordPress utilise le même cache que l’application Python. Vous pouvez le tester en ouvrant un nouveau terminal et en exécutant la commande suivante :

redis-cli monitor

Au fur et à mesure que vous naviguez sur votre site, les requêtes du site web s’affichent dans l’invite de commande :

Surveiller les requêtes du serveur dans le terminal avec redis-cli.
Surveiller les requêtes du serveur dans le terminal avec redis-cli.

Maintenant que le frontend et le backend sont synchronisés, vous pouvez ajouter un nouvel article à WordPress en utilisant votre application Python à travers l’API REST.

Pour cela, modifiez l’objet POST dans app.py pour inclure votre nouvel article, puis exécutez python app.py pour ajouter l’article au cache.

Résumé

Dans cet article, nous avons appris à connecter une base de données Redis à une application Python en utilisant le client Redis Python. Ce client prend en charge plusieurs formats pour les stockages de données Redis : listes, ensembles, dictionnaires et autres types de données de commande.

Nous avons également vu comment intégrer Redis dans un site WordPress via l’API REST et l’extension Redis Object Cache.

La possibilité d’utiliser le cache en mémoire Redis pour votre site en fait un outil de développement puissant et flexible. Redis est extraordinairement efficace pour améliorer la vitesse d’interrogation de votre base de données, les performances de votre site et l’expérience générale de l’utilisateur.

En prime, vous pouvez demander à Kinsta de se charger de l’installation de Redis pour votre site WordPress. De plus, les fans de Redis trouveront leur serveur favori disponible en tant qu’implémentation autonome dans le service d’hébergement de base de données infogéré de Kinsta.

Steve Bonisteel Kinsta

Steve Bonisteel est un rédacteur technique chez Kinsta qui a commencé sa carrière d'écrivain en tant que journaliste de presse écrite, chassant les ambulances et les camions de pompiers. Il couvre les technologies similaires à l'Internet depuis la fin des années 1990.