
Sprog 🇩🇰 Dansk
Dokumentation
Kom i gang
Brug
API-reference
Tilføj kommentarer til din Django-app
Dette er den officielle Django-pakke til FastComments.
Live-kommentarer og chat-komponenter med sikker SSO via skabelon-tags.
Arkiv
Krav 
- Python 3.10+
- Django 4.2, 5.0, 5.1, eller 5.2
- Et FastComments tenant ID (brug
demofor at prøve det uden en konto) - Et API secret er kun påkrævet for Secure SSO
Installation 
Installer fra et release-tag (dette projekt distribueres via git-tags, ikke PyPI):
pip install "git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
For server-side REST-adgang (hjælperne admin() / public_api()), tilføj
api ekstra, som henter SDK'ens genererede klient:
pip install "fastcomments-django[api] @ git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
Tilføj appen til INSTALLED_APPS:
INSTALLED_APPS = [
# ...
"fastcomments_django",
]
Hurtigstart 
Konfigurer din tenant i settings.py:
import os
FASTCOMMENTS = {
"TENANT_ID": os.environ.get("FASTCOMMENTS_TENANT_ID", "demo"),
}
Indsæt widget'en i enhver skabelon:
{% load fastcomments %}
{% fastcomments url_id="my-page" %}
Forudsætninger for automatisk SSO 
For at automatisk videregive den indloggede bruger til widgeten, læser tag'ene den aktuelle bruger fra request'en. Sørg for, at dit projekt har begge disse (de er som standard aktiveret i et standard Django‑projekt):
django.template.context_processors.requestiTEMPLATES["OPTIONS"]["context_processors"]django.contrib.auth.middleware.AuthenticationMiddlewareiMIDDLEWARE
Uden en request i skabelonens kontekst, renderes widgets for en anonym besøgende. Du kan altid videregive en bruger eksplicit: {% fastcomments user=some_user %}.
Widget-tags 
Every widget has its own tag. All of them accept **extra keyword arguments,
which are merged into the widget config as‑is (use camelCase keys) for anything
not covered by the named arguments below.
| Tag | 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 |
Named arguments map to the widget's camelCase config keys:
| Argument | Config key | Tags |
|---|---|---|
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 |
Eksempler:
{% 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 %}
{# Samarbejdschat knytter sig til et eksisterende element på siden #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}
{# Masseoptællinger: placer markører, derefter fylder en masseindlæser dem alle ind #}
{% 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 og vælg en tilstand i settings.py. Secure SSO underskriver brugeren på server‑siden med HMAC‑SHA256 ved hjælp af din API‑hemmelighed og anbefales.
FASTCOMMENTS = {
"TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
"API_KEY": os.environ["FASTCOMMENTS_API_KEY"], # din API‑hemmelighed; underskriver Secure SSO
"SSO": {
"ENABLED": True,
"MODE": "secure", # "secure" | "simple"
# Kortlæg FastComments‑felter til din brugermodel. Værdier kan være et attribut
# navn, en punktnotation‑sti ("profile.avatar_url"), et callable(user), eller 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, eller punktnotation‑sti
"IS_MODERATOR": None,
"GROUP_IDS": None, # callable(user) -> list, eller punktnotation‑sti
},
}
Vælg SSO
idbevidst. FastCommentsider den permanente håndtag for en brugers kommentarthistorik. Standard-USER_MAPkortlægger den til din Django‑primærnøgle for nul‑konfigurations‑bekvemmelighed, men sekventielle heltals‑PK'er er gennemskuelige og svære at ændre senere (ændring af en brugersidopdeler deres historik i en ny konto). For alt ud over en demo, kortlægidtil en stabil, uigennemsigtig værdi valgt på forhånd (en UUID eller et dedikeret offentligt id), og læg aldrig private data i den. Eksempel‑appen bruger et brugernavns‑baseret id af denne grund.
SSO injiceres automatisk i {% fastcomments %}, {% fastcomments_live_chat %}, {% fastcomments_collab_chat %}, {% fastcomments_image_chat %} og {% fastcomments_user_activity %} for den aktuelle bruger.
Login-/logout‑URL’er, der vises for ikke‑loggede besøgende, standard er reverse("login") / reverse("logout"); tilsidesæt dem med SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].
Tilpasset kortlægning
To højere præcedens‑indstillinger har forrang over USER_MAP:
-
En metode på din brugermodel (den Python‑ækvivalente analog til et interface):
class User(AbstractUser): def to_fastcomments_user_data(self): return {"id": self.pk, "email": self.email, "username": self.get_username()} -
En global mapper, en punktnotation‑sti til
callable(user) -> dict:FASTCOMMENTS = {"SSO": {"USER_MAPPER": "myapp.sso.map_user"}}
Præcedens er USER_MAPPER > to_fastcomments_user_data() > USER_MAP.
Server-side API-adgang 
Med udvidelsen [api] installeret kan du kalde FastComments REST API'en gennem SDK'en, som er forudkonfigureret med din API-nøgle og region:
from fastcomments_django import admin, public_api, get_manager
admin().get_comments("YOUR_TENANT_ID", ...) # godkendt (DefaultApi)
public_api().get_comments_public(...) # offentlig (PublicApi)
# Generér en SSO-token til API‑kald eller klientoverdragelse:
token = get_manager().sso().token_for(request.user)
EU-region 
Indstil REGION for at rute widgets og API til EU:
FASTCOMMENTS = {"TENANT_ID": "...", "REGION": "eu"}
Tilpasning af embed-markup 
Overskriv fastcomments/widget.html ved at placere din egen kopi tidligere på
skabelonsøgestien (et projekt templates/fastcomments/widget.html). Dette er
Django-analogen til Laravel's vendor:publish --tag=fastcomments-views.
Indstillingsreference 
| Key | Default | Description |
|---|---|---|
TENANT_ID | "" | Dit FastComments tenant‑ID (demo til test). |
API_KEY | "" | Din API‑hemmelighed. Signerer Secure SSO og godkender admin(). |
REGION | None | None for USA, "eu" for EU‑regionen. |
SSO.ENABLED | False | Aktiver SSO. |
SSO.MODE | "secure" | "secure" (HMAC) eller "simple" (uden signatur). |
SSO.LOGIN_URL / SSO.LOGOUT_URL | None | Vises for brugere som er logget ud; standard er reverse("login"/"logout"). |
SSO.USER_MAP | id/email/username | FastComments‑felt til bruger‑attribut/sti/kaldbar. |
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDS | None | callable(user) eller punktnotationsti. |
SSO.USER_MAPPER | None | Punktnotationsti til callable(user) -> dict; højeste præcedens. |
WIDGET_DEFAULTS | {} | Konfiguration flettet ind i hver widget (camelCase‑nøgler). |
Eksempelprojekt 
A runnable showcase lives in example/: a left-rail + main-stage
app with a page per widget and a sign-in page listing pre-seeded demo users.
Log ind som en af dem, og kommentar‑ og live‑chat‑widgetsene autentificerer den identitet via Secure SSO. Fra den mappe:
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
Uden en API secret falder den tilbage til den offentlige demo tenant (anonymous).
example/browser_smoke.py er en Playwright e2e
der indlæser siden i en rigtig browser og poster en kommentar som Secure‑SSO‑brugeren.
Brug for hjælp?
Hvis du støder på problemer eller har spørgsmål om Django‑pakken, så gør venligst:
Bidrag
Bidrag er velkomne! Besøg venligst GitHub-repositoriet for retningslinjer for bidrag.