
Langue 🇫🇷 Français (France)
Documentation
Premiers pas
Utilisation
Référence API
Ajouter des commentaires à votre application Django
Ceci est le package Django officiel pour FastComments.
Composants de commentaires en direct et de chat avec SSO sécurisé via des balises de modèle.
Repository
Agents de codage IA 
Donnez à votre agent de codage le contexte FastComments dont il a besoin - widgets, configuration, SSO sécurisé, l'API REST et les SDK :
npx skills add fastcomments/skills
Fonctionne avec Claude Code, Codex, Cursor, Copilot, Gemini et tout autre agent pris en charge par le skills CLI supporté.
Exigences 
- Python 3.10+
- Django 4.2, 5.0, 5.1 ou 5.2
- Un ID de locataire FastComments (utilisez
demopour l'essayer sans compte) - Un secret d'API est requis uniquement pour le SSO sécurisé
Installation 
Installez à partir d’un tag de version (ce projet est distribué via des tags git, pas PyPI) :
pip install "git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
Pour un accès REST côté serveur (les aides admin() / public_api()), ajoutez l’extra
api, qui inclut le client généré du SDK :
pip install "fastcomments-django[api] @ git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
Ajoutez l’application à INSTALLED_APPS :
INSTALLED_APPS = [
# ...
"fastcomments_django",
]
Démarrage rapide 
Configurez votre tenant dans settings.py :
import os
FASTCOMMENTS = {
"TENANT_ID": os.environ.get("FASTCOMMENTS_TENANT_ID", "demo"),
}
Déposez le widget dans n'importe quel modèle :
{% load fastcomments %}
{% fastcomments url_id="my-page" %}
Prérequis pour le SSO automatique 
Pour transmettre l'utilisateur connecté au widget automatiquement, les balises lisent le utilisateur actuel depuis la requête. Assurez‑vous que votre projet possède les deux (elles sont activées par défaut dans un projet Django standard) :
django.template.context_processors.requestdansTEMPLATES["OPTIONS"]["context_processors"]django.contrib.auth.middleware.AuthenticationMiddlewaredansMIDDLEWARE
Sans une requête dans le contexte du modèle, les widgets s'affichent pour un visiteur anonyme.
Vous pouvez toujours passer un utilisateur explicitement : {% fastcomments user=some_user %}.
Balises de widget 
Chaque widget possède sa propre balise. Toutes acceptent les arguments mot‑clé **extra, qui sont fusionnés dans la configuration du widget tels quels (utilisez des clés en camelCase) pour tout ce qui n’est pas couvert par les arguments nommés ci‑dessous.
| Balise | Widget |
|---|---|
{% fastcomments %} | Commentaires |
{% fastcomments_live_chat %} | Chat en direct |
{% fastcomments_comment_count %} | Badge de nombre de commentaires |
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %} | Comptes de commentaires en masse |
{% fastcomments_collab_chat target="#el" %} | Chat collaboratif (en ligne) |
{% fastcomments_image_chat target="#el" %} | Chat d’annotation d’image |
{% fastcomments_recent_comments %} | Commentaires récents |
{% fastcomments_recent_discussions %} | Discussions récentes |
{% fastcomments_reviews_summary %} | Résumé des avis |
{% fastcomments_top_pages %} | Pages les plus commentées |
{% fastcomments_user_activity user_id="..." %} | Flux d'activité d'un utilisateur |
Les arguments nommés correspondent aux clés de configuration camelCase du widget :
| Argument | Clé de configuration | Balises |
|---|---|---|
url_id | urlId | commentaires, chat en direct, compteur de commentaires, chat collaboratif/image, commentaires récents, résumé des avis |
url | url | commentaires, chat en direct, chat collaboratif/image |
readonly | readonly | commentaires, chat en direct, chat collaboratif/image |
locale | locale | commentaires, chat en direct, chat collaboratif/image, activité utilisateur |
has_dark_background | hasDarkBackground | toutes |
default_sort_direction | defaultSortDirection | commentaires, chat en direct, chat collaboratif/image |
number_only | numberOnly | compteur de commentaires |
is_live | isLive | compteur de commentaires |
count | count | commentaires récents, discussions récentes |
target | (querySelector, not sent) | chat collaboratif, chat image |
chat_square_percentage | chatSquarePercentage | chat image |
user_id | userId | activité utilisateur |
Exemples :
{% load fastcomments %}
{% fastcomments url_id="my-page" locale="en_us" default_sort_direction="MR" %}
{% fastcomments_live_chat url_id="room-1" %}
Comments: {% fastcomments_comment_count url_id="my-page" number_only=True %}
{# Le chat collaboratif se branche à un élément existant sur la page #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}
{# Comptes en masse : placez des marqueurs, puis un chargeur en masse les remplit tous #}
{% for post in posts %}
<a href="\{{ post.url }}">\{{ post.title }}</a>
{% fastcomments_count_marker url_id=post.url_id %}
{% endfor %}
{% fastcomments_comment_count_bulk %}
SSO (authentification unique) 
Activez le SSO et choisissez un mode dans settings.py. Le SSO sécurisé signe l'utilisateur
côté serveur avec HMAC-SHA256 en utilisant votre secret d'API et est recommandé.
FASTCOMMENTS = {
"TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
"API_KEY": os.environ["FASTCOMMENTS_API_KEY"], # votre secret d'API ; signe le SSO sécurisé
"SSO": {
"ENABLED": True,
"MODE": "secure", # "secure" | "simple"
# Mappez les champs FastComments à votre modèle utilisateur. Les valeurs peuvent être
# un nom d'attribut, un chemin pointé ("profile.avatar_url"), un callable(user), ou None.
"USER_MAP": {
"id": "id",
"email": "email",
"username": "username",
"avatar": None,
"display_name": None,
"website_url": None,
},
"IS_ADMIN": lambda user: user.is_staff, # callable(user) -> bool, ou chemin pointé
"IS_MODERATOR": None,
"GROUP_IDS": None, # callable(user) -> list, ou chemin pointé
},
}
Choisissez délibérément le
iddu SSO. LeidFastComments est l'identifiant permanent de l'historique de commentaires d'un utilisateur. LeUSER_MAPpar défaut le mappe à votre clé primaire Django pour plus de commodité sans configuration, mais les clés primaires entières séquentielles sont énumérables et difficiles à changer plus tard (changer leidd'un utilisateur divise son historique en un nouveau compte). Pour tout usage au-delà d'une démo, mappezidà une valeur stable et opaque choisie dès le départ (un UUID ou un identifiant public dédié), et n'y mettez jamais de données privées. L'application d'exemple utilise un identifiant basé sur le nom d'utilisateur pour cette raison.
Le SSO est injecté automatiquement dans {% fastcomments %}, {% fastcomments_live_chat %},
{% fastcomments_collab_chat %}, {% fastcomments_image_chat %} et
{% fastcomments_user_activity %} pour l'utilisateur courant.
Les URLs de connexion/déconnexion affichées aux visiteurs non connectés pointent par défaut vers
reverse("login") / reverse("logout") ; remplacez-les avec SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].
Mapping personnalisé
Deux options de priorité supérieure priment sur USER_MAP :
-
Une méthode sur votre modèle utilisateur (l'équivalent Pythonique d'une interface) :
class User(AbstractUser): def to_fastcomments_user_data(self): return {"id": self.pk, "email": self.email, "username": self.get_username()} -
Un mappeur global, un chemin pointé vers
callable(user) -> dict:FASTCOMMENTS = {"SSO": {"USER_MAPPER": "myapp.sso.map_user"}}
La priorité est USER_MAPPER > to_fastcomments_user_data() > USER_MAP.
Accès à l'API côté serveur 
Avec l'extra [api] installé, appelez l'API REST de FastComments via le SDK,
pré‑configuré avec votre clé API et votre région :
from fastcomments_django import admin, public_api, get_manager
admin().get_comments("YOUR_TENANT_ID", ...) # authenticated (DefaultApi)
public_api().get_comments_public(...) # public (PublicApi)
# Generate an SSO token for API calls or client hand-off:
token = get_manager().sso().token_for(request.user)
Région UE 
Définissez REGION pour acheminer les widgets et l'API vers l'UE :
FASTCOMMENTS = {"TENANT_ID": "...", "REGION": "eu"}
Personnalisation du balisage d'intégration 
Surcharge fastcomments/widget.html en plaçant votre propre copie plus tôt dans le
chemin de recherche des modèles (un projet templates/fastcomments/widget.html). C’est
l’équivalent Django du vendor:publish --tag=fastcomments-views de Laravel.
Référence des paramètres 
| Clé | Valeur par défaut | Description |
|---|---|---|
TENANT_ID | "" | Votre ID de locataire FastComments (demo pour les tests). |
API_KEY | "" | Votre secret API. Signe le SSO sécurisé et authentifie admin(). |
REGION | None | None pour les États‑Unis, "eu" pour la région UE. |
SSO.ENABLED | False | Active le SSO. |
SSO.MODE | "secure" | "secure" (HMAC) ou "simple" (non signé). |
SSO.LOGIN_URL / SSO.LOGOUT_URL | None | Affiché aux visiteurs déconnectés ; par défaut à reverse("login"/"logout"). |
SSO.USER_MAP | id/email/username | Champ FastComments vers l’attribut/chemin/appelable de l’utilisateur. |
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDS | None | callable(user) ou chemin pointé. |
SSO.USER_MAPPER | None | Chemin pointé vers callable(user) -> dict ; priorité la plus élevée. |
WIDGET_DEFAULTS | {} | Configuration fusionnée dans chaque widget (clés en camelCase). |
Projet d'exemple 
Une démonstration exécutable se trouve dans example/ : une application à rail latéral + scène principale avec une page par widget et une page de connexion répertoriant des utilisateurs de démonstration pré‑alimentés.
Connectez‑vous avec l’un d’eux et les widgets de commentaire et de chat en direct authentifient cette identité via Secure SSO. Depuis ce répertoire :
python manage.py migrate
# Use your own tenant to see Secure SSO in action (an API secret enables it):
FASTCOMMENTS_TENANT_ID=... FASTCOMMENTS_API_KEY=... python manage.py runserver
Sans secret d’API, cela revient au locataire public demo (anonyme).
example/browser_smoke.py est un test e2e Playwright qui charge la page dans un vrai navigateur et publie un commentaire en tant qu’utilisateur Secure‑SSO.
Besoin d'aide ?
Si vous rencontrez des problèmes ou avez des questions concernant le package Django, veuillez :
Contribuer
Les contributions sont les bienvenues ! Veuillez consulter le dépôt GitHub pour connaître les directives de contribution.