
Taal 🇳🇱 Nederlands
Documentatie
Aan de slag
Gebruik
API-referentie
Voeg reacties toe aan je Django-app
Dit is het officiële Django‑pakket voor FastComments.
Live reacties en chatcomponenten met veilige SSO via sjabloontags.
Repository
Vereisten 
- Python 3.10+
- Django 4.2, 5.0, 5.1, of 5.2
- Een FastComments tenant ID (gebruik
demoom het zonder account uit te proberen) - Een API secret is alleen vereist voor Secure SSO
Installatie 
Install from a release tag (this project is distributed via git tags, not PyPI):
pip install "git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
For server-side REST access (the admin() / public_api() helpers), add the
api extra, which pulls in the SDK's generated client:
pip install "fastcomments-django[api] @ git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
Add the app to INSTALLED_APPS:
INSTALLED_APPS = [
# ...
"fastcomments_django",
]
Snelstart 
Configureer uw tenant in settings.py:
import os
FASTCOMMENTS = {
"TENANT_ID": os.environ.get("FASTCOMMENTS_TENANT_ID", "demo"),
}
Plaats de widget in een willekeurige template:
{% load fastcomments %}
{% fastcomments url_id="my-page" %}
Voorvereisten voor automatische SSO 
Om de ingelogde gebruiker automatisch aan de widget door te geven, lezen de tags de
huidige gebruiker uit het request. Zorg ervoor dat je project beide heeft (ze
staan standaard ingeschakeld in een standaard Django-project):
django.template.context_processors.requestinTEMPLATES["OPTIONS"]["context_processors"]django.contrib.auth.middleware.AuthenticationMiddlewareinMIDDLEWARE
Zonder een request in de template-context renderen widgets voor een anonieme
bezoeker. Je kunt altijd expliciet een gebruiker doorgeven: {% fastcomments user=some_user %}.
Widget-tags 
Elke widget heeft zijn eigen tag. Alle widgets accepteren **extra keyword‑argumenten,
die ongewijzigd worden samengevoegd in de widgetconfiguratie (gebruik camelCase‑sleutels) voor alles
dat niet wordt gedekt door de hieronder genoemde argumenten.
| Tag | Widget |
|---|---|
{% fastcomments %} | Reacties |
{% fastcomments_live_chat %} | Livechat |
{% fastcomments_comment_count %} | Reactieteller badge |
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %} | Bulk reactietellingen |
{% fastcomments_collab_chat target="#el" %} | Samenwerkende (inline) chat |
{% fastcomments_image_chat target="#el" %} | Afbeeldingsannotatie chat |
{% fastcomments_recent_comments %} | Recente reacties |
{% fastcomments_recent_discussions %} | Recente discussies |
{% fastcomments_reviews_summary %} | Samenvatting van recensies |
{% fastcomments_top_pages %} | Meest besproken pagina's |
{% fastcomments_user_activity user_id="..." %} | Activiteitsfeed van een gebruiker |
Naamgegeven argumenten worden gemapt naar de camelCase‑configuratiesleutels van de widget:
| Argument | Config key | Tags |
|---|---|---|
url_id | urlId | reacties, livechat, reactieteller, samenwerkende (inline) chat/afbeeldingsannotatie chat, recente reacties, samenvatting van recensies |
url | url | reacties, livechat, samenwerkende (inline) chat/afbeeldingsannotatie chat |
readonly | readonly | reacties, livechat, samenwerkende (inline) chat/afbeeldingsannotatie chat |
locale | locale | reacties, livechat, samenwerkende (inline) chat/afbeeldingsannotatie chat, gebruikersactiviteit |
has_dark_background | hasDarkBackground | alle |
default_sort_direction | defaultSortDirection | reacties, livechat, samenwerkende (inline) chat/afbeeldingsannotatie chat |
number_only | numberOnly | reactieteller |
is_live | isLive | reactieteller |
count | count | recente reacties, recente discussies |
target | (querySelector, not sent) | samenwerkende (inline) chat, afbeeldings chat |
chat_square_percentage | chatSquarePercentage | afbeeldings chat |
user_id | userId | gebruikersactiviteit |
Voorbeelden:
{% 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 %}
{# Samenwerkende chat wordt gekoppeld aan een bestaand element op de pagina #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}
{# Bulk tellers: plaats markers, daarna vult één bulkloader ze allemaal in #}
{% 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 (Single Sign-On) 
Enable SSO en kies een modus in settings.py. Secure SSO ondertekent de gebruiker server‑side met HMAC‑SHA256 met behulp van je API‑secret en wordt aanbevolen.
FASTCOMMENTS = {
"TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
"API_KEY": os.environ["FASTCOMMENTS_API_KEY"], # jouw API‑secret; ondertekent Secure SSO
"SSO": {
"ENABLED": True,
"MODE": "secure", # "secure" | "simple"
# Koppel FastComments‑velden aan je gebruikersmodel. Waarden kunnen een attribuut
# naam, een dotted path ("profile.avatar_url"), een callable(user), of 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, of een dotted path
"IS_MODERATOR": None,
"GROUP_IDS": None, # callable(user) -> list, of een dotted path
},
}
Kies de SSO
idzorgvuldig. Het FastCommentsidis de permanente identifier voor de reactiegeschiedenis van een gebruiker. De standaardUSER_MAPkoppelt deze aan je Django‑primaire‑sleutel voor nul‑configuratiegemak, maar opeenvolgende gehele PK's zijn telbaar en moeilijk later te wijzigen (het wijzigen van een gebruikersidsplitst hun geschiedenis over een nieuw account). Voor alles buiten een demo, koppelidaan een stabiele, ondoorzichtige waarde die vooraf wordt gekozen (een UUID of een toegewijde publieke id), en plaats daar nooit privé‑data in. De voorbeeld‑app gebruikt een op gebruikersnaam gebaseerd id om deze reden.
SSO wordt automatisch geïnjecteerd in {% fastcomments %}, {% fastcomments_live_chat %},
{% fastcomments_collab_chat %}, {% fastcomments_image_chat %} en
{% fastcomments_user_activity %} voor de huidige gebruiker.
Login-/logout‑URL's die aan uitgelogde bezoekers worden getoond, wijzen standaard naar reverse("login") /
reverse("logout"); overschrijf ze met SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].
Custom mapping
Two higher-precedence options beat USER_MAP:
-
Een methode op je gebruikersmodel (de Python‑achtige analog van een interface):
class User(AbstractUser): def to_fastcomments_user_data(self): return {"id": self.pk, "email": self.email, "username": self.get_username()} -
Een globale mapper, een dotted path naar
callable(user) -> dict:FASTCOMMENTS = {"SSO": {"USER_MAPPER": "myapp.sso.map_user"}}
Prioriteit is USER_MAPPER > to_fastcomments_user_data() > USER_MAP.
Server-side API-toegang 
Met de [api] extra geïnstalleerd, roep de FastComments REST API aan via de SDK,
vooraf geconfigureerd met uw API‑sleutel en regio:
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)
EU-regio 
Stel REGION in om de widgets en API naar de EU te routeren:
FASTCOMMENTS = {"TENANT_ID": "...", "REGION": "eu"}
Aanpassen van de embed-markup 
Overschrijf fastcomments/widget.html door uw eigen kopie eerder op het
sjabloon‑zoekpad (een project templates/fastcomments/widget.html). Dit is
de Django‑analog van Laravel's vendor:publish --tag=fastcomments-views.
Instellingenreferentie 
| Sleutel | Standaard | Beschrijving |
|---|---|---|
TENANT_ID | "" | Uw FastComments-tenant-ID (demo voor testen). |
API_KEY | "" | Uw API‑geheim. Ondertekent Secure SSO en authenticeert admin(). |
REGION | None | None voor US, "eu" voor de EU-regio. |
SSO.ENABLED | False | Schakel SSO in. |
SSO.MODE | "secure" | "secure" (HMAC) of "simple" (ongetekend). |
SSO.LOGIN_URL / SSO.LOGOUT_URL | None | Getoond aan uitgelogde bezoekers; standaard reverse("login"/"logout"). |
SSO.USER_MAP | id/email/username | FastComments‑veld naar gebruikersattribuut/pad/aanroepbaar. |
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDS | None | callable(user) of puntnotatie‑pad. |
SSO.USER_MAPPER | None | Puntnotatie‑pad naar callable(user) -> dict; hoogste prioriteit. |
WIDGET_DEFAULTS | {} | Configuratie samengevoegd in elke widget (camelCase‑sleutels). |
Voorbeeldproject 
Een uitvoerbare showcase bevindt zich in example/: een left-rail + main-stage app met een pagina per widget en een inlogpagina die vooraf ingestelde demo‑gebruikers vermeldt.
Log in als een van hen en de commentaar‑ en live‑chat‑widgets authenticeren die identiteit via Secure SSO. Van die map:
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
Zonder een API‑secret valt het terug naar de publieke demo tenant (anoniem).
example/browser_smoke.py is een Playwright‑e2e die de pagina laadt in een echte browser en een opmerking plaatst als de Secure‑SSO gebruiker.
Hulp nodig?
Als je problemen ondervindt of vragen hebt over het Django-pakket, kun je:
Bijdragen
Bijdragen zijn welkom! Bezoek de GitHub-repository voor richtlijnen voor bijdragen.