
Langue 🇨🇦 Français (Canada)
Documentation
Prise en main
Utilisation
Référence API
Ajouter des commentaires à votre application Django
Ceci est le paquet Django officiel pour FastComments.
Composants de commentaires en direct et de chat avec SSO sécurisé via les balises de modèle.
Dépôt
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’une balise de version (ce projet est distribué via des balises git, pas PyPI) :
pip install "git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
Pour l’accès REST côté serveur (les aides admin() / public_api()), ajoutez l’extra api, qui charge le client généré par le 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 locataire dans settings.py:
import os
FASTCOMMENTS = {
"TENANT_ID": os.environ.get("FASTCOMMENTS_TENANT_ID", "demo"),
}
Insérez le widget dans n'importe quel modèle:
{% load fastcomments %}
{% fastcomments url_id="my-page" %}
Prérequis pour SSO automatique 
Pour transmettre l'utilisateur connecté au widget automatiquement, les balises lisent l'utilisateur actuel à partir de la requête. Assurez‑vous que votre projet possède les deux (ils sont activés par défaut dans un projet Django standard) :
django.template.context_processors.requestinTEMPLATES["OPTIONS"]["context_processors"]django.contrib.auth.middleware.AuthenticationMiddlewareinMIDDLEWARE
Sans requête dans le contexte du modèle, les widgets s'affichent pour un visiteur anonyme. Vous pouvez toujours transmettre 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 tel quel (utilisez des clés camelCase) pour tout
qui n’est pas couvert par les arguments nommés ci‑dessous.
| Balise | Widget |
|---|---|
{% fastcomments %} | Comments |
{% fastcomments_live_chat %} | Live chat |
{% fastcomments_comment_count %} | Comment count badge |
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %} | Bulk comment counts |
{% fastcomments_collab_chat target="#el" %} | Collaborative (inline) chat |
{% fastcomments_image_chat target="#el" %} | Image annotation chat |
{% fastcomments_recent_comments %} | Recent comments |
{% fastcomments_recent_discussions %} | Recent discussions |
{% fastcomments_reviews_summary %} | Reviews summary |
{% fastcomments_top_pages %} | Most-discussed pages |
{% fastcomments_user_activity user_id="..." %} | A user's activity feed |
Les arguments nommés correspondent aux clés camelCase de la configuration du widget :
| Argument | Clé de configuration | Balises |
|---|---|---|
url_id | urlId | comments, live chat, comment count, collab/image chat, recent comments, reviews summary |
url | url | comments, live chat, collab/image chat |
readonly | readonly | comments, live chat, collab/image chat |
locale | locale | comments, live chat, collab/image chat, user activity |
has_dark_background | hasDarkBackground | all |
default_sort_direction | defaultSortDirection | comments, live chat, collab/image chat |
number_only | numberOnly | comment count |
is_live | isLive | comment count |
count | count | recent comments, recent discussions |
target | (querySelector, not sent) | collab chat, image chat |
chat_square_percentage | chatSquarePercentage | image chat |
user_id | userId | user activity |
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 s’attache à un élément existant sur la page #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}
{# Comptes groupés : placez des marqueurs, puis un chargeur groupé 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 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"], # your API secret; signs Secure SSO
"SSO": {
"ENABLED": True,
"MODE": "secure", # "secure" | "simple"
# Map FastComments fields to your user model. Values may be an attribute
# name, a dotted path ("profile.avatar_url"), a callable(user), or 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, or dotted path
"IS_MODERATOR": None,
"GROUP_IDS": None, # callable(user) -> list, or dotted path
},
}
Choisissez délibérément le
idSSO. LeidFastComments est le handle permanent de l'historique des commentaires d'un utilisateur. LeUSER_MAPpar défaut le mappe à la clé primaire de Django pour une commodité sans configuration, mais les PK entiers séquentiels sont énumérables et difficiles à changer plus tard (modifier leidd'un utilisateur divise son historique en un nouveau compte). Pour tout usage au‑delà d'une démonstration, mappez leidà une valeur stable et opaque choisie à l'avance (un UUID ou un identifiant public dédié), et ne placez jamais de données privées dedans. L'application d'exemple utilise unidbasé 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 actuel.
Les URL de connexion/déconnexion affichées aux visiteurs non connectés utilisent par défaut reverse("login") / reverse("logout") ; remplacez‑les avec SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].
Mappage personnalisé
Deux options à priorité supérieure supplantent USER_MAP :
-
Une méthode sur votre modèle d'utilisateur (l'analogue 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 mapper 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 FastComments via le SDK, préconfiguré avec votre clé d'API et votre région :
from fastcomments_django import admin, public_api, get_manager
admin().get_comments("YOUR_TENANT_ID", ...) # authentifié (DefaultApi)
public_api().get_comments_public(...) # public (PublicApi)
# Générer un jeton SSO pour les appels API ou la remise au client :
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 
Remplacez 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). Il s’agit de 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 d'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 ; valeur 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 
A runnable showcase lives in example/ : une application à rail latéral + scène principale avec une page par widget et une page de connexion référençant 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
# Utilisez votre propre locataire pour voir Secure SSO en action (un secret API l'active) :
FASTCOMMENTS_TENANT_ID=... FASTCOMMENTS_API_KEY=... python manage.py runserver
Sans secret API, il 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 visiter le référentiel GitHub pour les directives de contribution.