FastComments.com

Kommentare zu Ihrer Django-App hinzufügen

Dies ist das offizielle Django-Paket für FastComments.

Live‑Kommentare und Chat‑Komponenten mit Secure SSO über Template‑Tags.

Repository

Auf GitHub ansehen

KI-Programmieragenten Internal Link

skills.sh

Geben Sie Ihrem Coding‑Agent den FastComments‑Kontext, den er benötigt – Widgets, Konfiguration, Secure SSO, die REST‑API und die SDKs:

npx skills add fastcomments/skills

Funktioniert mit Claude Code, Codex, Cursor, Copilot, Gemini und jedem anderen Agenten, den das skills CLI unterstützt.

Anforderungen Internal Link

  • Python 3.10+
  • Django 4.2, 5.0, 5.1, or 5.2
  • Eine FastComments-Mandanten-ID (verwenden Sie demo, um es ohne Konto auszuprobieren)
  • Ein API‑Geheimnis ist nur für Secure SSO erforderlich

Installation Internal Link

Von einem Release‑Tag installieren (dieses Projekt wird über Git‑Tags verteilt, nicht über PyPI):

pip install "git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"

Für serverseitigen REST‑Zugriff (die admin() / public_api() Hilfsfunktionen), füge das api‑Extra hinzu, das den vom SDK generierten Client einbindet:

pip install "fastcomments-django[api] @ git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"

Füge die App zu INSTALLED_APPS hinzu:

INSTALLED_APPS = [
    # ...
    "fastcomments_django",
]

Schnellstart Internal Link

Konfigurieren Sie Ihren Mandanten in settings.py:

import os

FASTCOMMENTS = {
    "TENANT_ID": os.environ.get("FASTCOMMENTS_TENANT_ID", "demo"),
}

Fügen Sie das Widget in jede Vorlage ein:

{% load fastcomments %}

{% fastcomments url_id="my-page" %}

Voraussetzungen für automatisches SSO Internal Link

Um den angemeldeten Benutzer automatisch an das Widget zu übergeben, lesen die Tags den
aktuellen Benutzer aus der Anfrage. Stellen Sie sicher, dass Ihr Projekt beide dieser (sie
standardmäßig in einem Standard‑Django‑Projekt aktiviert) Komponenten enthält:

  • django.template.context_processors.request in TEMPLATES["OPTIONS"]["context_processors"]
  • django.contrib.auth.middleware.AuthenticationMiddleware in MIDDLEWARE

Ohne eine Anfrage im Template-Kontext rendern Widgets für einen anonymen
Besucher. Sie können immer explizit einen Benutzer übergeben: {% fastcomments user=some_user %}.

Widget-Tags Internal Link

Jedes Widget hat sein eigenes Tag. Alle akzeptieren das Schlüsselwort‑Argument **extra, das unverändert (mit camelCase‑Schlüsseln) in die Widget‑Konfiguration übernommen wird, wenn es nicht von den unten genannten benannten Argumenten abgedeckt wird.

TagWidget
{% fastcomments %}Kommentare
{% fastcomments_live_chat %}Live‑Chat
{% fastcomments_comment_count %}Kommentar‑Zähler‑Badge
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %}Bulk‑Kommentarzähler
{% fastcomments_collab_chat target="#el" %}Kollaborativer (inline) Chat
{% fastcomments_image_chat target="#el" %}Bild‑Annotierungs‑Chat
{% fastcomments_recent_comments %}Aktuelle Kommentare
{% fastcomments_recent_discussions %}Aktuelle Diskussionen
{% fastcomments_reviews_summary %}Zusammenfassung von Bewertungen
{% fastcomments_top_pages %}Meist‑diskutierte Seiten
{% fastcomments_user_activity user_id="..." %}Aktivitäts‑Feed eines Benutzers

Benannte Argumente entsprechen den camelCase‑Konfigurationsschlüsseln des Widgets:

ArgumentKonfigurationsschlüsselTags
url_idurlIdKommentare, Live‑Chat, Kommentar‑Zähler, Kollaborativer/Bild‑Chat, aktuelle Kommentare, Zusammenfassung von Bewertungen
urlurlKommentare, Live‑Chat, Kollaborativer/Bild‑Chat
readonlyreadonlyKommentare, Live‑Chat, Kollaborativer/Bild‑Chat
localelocaleKommentare, Live‑Chat, Kollaborativer/Bild‑Chat, Benutzer‑Aktivität
has_dark_backgroundhasDarkBackgroundalle
default_sort_directiondefaultSortDirectionKommentare, Live‑Chat, Kollaborativer/Bild‑Chat
number_onlynumberOnlyKommentar‑Zähler
is_liveisLiveKommentar‑Zähler
countcountaktuelle Kommentare, aktuelle Diskussionen
target(querySelector, nicht gesendet)Kollaborativer Chat, Bild‑Chat
chat_square_percentagechatSquarePercentageBild‑Chat
user_iduserIdBenutzer‑Aktivität

Beispiele:

{% load fastcomments %}

{% fastcomments url_id="my-page" locale="en_us" default_sort_direction="MR" %}

{% fastcomments_live_chat url_id="room-1" %}

Kommentare: {% fastcomments_comment_count url_id="my-page" number_only=True %}

{# Kollaborativer Chat fügt sich an ein vorhandenes Element auf der Seite ein #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}

{# Bulk‑Zähler: Marker setzen, dann füllt ein Bulk‑Loader sie alle aus #}
{% 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 (Einmalige Anmeldung) Internal Link

Aktiviere SSO und wähle einen Modus in settings.py. Secure SSO signiert den Benutzer serverseitig mit HMAC-SHA256 unter Verwendung deines API-Secrets und wird empfohlen.

FASTCOMMENTS = {
    "TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
    "API_KEY": os.environ["FASTCOMMENTS_API_KEY"],   # dein API-Secret; signiert Secure SSO
    "SSO": {
        "ENABLED": True,
        "MODE": "secure",                            # "secure" | "simple"
        # Ordne FastComments-Felder deinem Benutzermodell zu. Werte können ein Attributname,
        # ein gepunkteter Pfad ("profile.avatar_url"), eine callable(user) oder None sein.
        "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, oder gepunkteter Pfad
        "IS_MODERATOR": None,
        "GROUP_IDS": None,                           # callable(user) -> list, oder gepunkteter Pfad
    },
}

Wähle die SSO-id bewusst. Die FastComments-id ist der permanente Handle für den Kommentarverlauf eines Benutzers. Die Standard-USER_MAP ordnet sie deinem Django-Primärschlüssel zu, um eine Zero-Config-Bequemlichkeit zu bieten, aber sequenzielle Integer-PKs sind aufzählbar und später schwer zu ändern (das Ändern der id eines Benutzers teilt seinen Verlauf in ein neues Konto auf). Für alles über eine Demo hinaus, ordne id einem stabilen, opaken Wert zu, der von vornherein gewählt wird (eine UUID oder eine dedizierte öffentliche ID), und lege niemals private Daten darin ab. Die Beispiel-App verwendet aus diesem Grund eine benutzernamebasierte ID.

SSO wird automatisch in {% fastcomments %}, {% fastcomments_live_chat %}, {% fastcomments_collab_chat %}, {% fastcomments_image_chat %} und {% fastcomments_user_activity %} für den aktuellen Benutzer injiziert.

An- und Abmelde-URLs, die abgemeldeten Besuchern angezeigt werden, sind standardmäßig reverse("login") / reverse("logout"); überschreibe sie mit SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].

Benutzerdefiniertes Mapping

Zwei Optionen mit höherer Priorität schlagen USER_MAP:

  • Eine Methode auf deinem Benutzermodell (das Python-Analogon zu einem Interface):

    class User(AbstractUser):
        def to_fastcomments_user_data(self):
            return {"id": self.pk, "email": self.email, "username": self.get_username()}
  • Ein globaler Mapper, ein gepunkteter Pfad zu callable(user) -> dict:

    FASTCOMMENTS = {"SSO": {"USER_MAPPER": "myapp.sso.map_user"}}

Die Priorität ist USER_MAPPER > to_fastcomments_user_data() > USER_MAP.

Serverseitiger API-Zugriff Internal Link

Mit dem [api]‑Extra installiert, rufen Sie die FastComments REST API über das SDK auf, das mit Ihrem API‑Schlüssel und Ihrer Region vorkonfiguriert ist:

from fastcomments_django import admin, public_api, get_manager

admin().get_comments("YOUR_TENANT_ID", ...)     # authentifiziert (DefaultApi)
public_api().get_comments_public(...)            # öffentlich (PublicApi)

# Generieren Sie ein SSO‑Token für API‑Aufrufe oder die Weitergabe an den Client:
token = get_manager().sso().token_for(request.user)

EU-Region Internal Link

Setzen Sie REGION, um die Widgets und die API in die EU zu leiten:

FASTCOMMENTS = {"TENANT_ID": "...", "REGION": "eu"}

Anpassen des Einbettungs-Markups Internal Link

Überschreiben Sie fastcomments/widget.html, indem Sie Ihre eigene Kopie früher im Vorlagensuchpfad (ein Projekt templates/fastcomments/widget.html). Dies ist das Django-Analogon zu Laravels vendor:publish --tag=fastcomments-views.

Einstellungsreferenz Internal Link

KeyDefaultDescription
TENANT_ID""Ihre FastComments Mandanten‑ID (demo für Tests).
API_KEY""Ihr API‑Geheimnis. Signiert Secure SSO und authentifiziert admin().
REGIONNoneNone für US, "eu" für die EU‑Region.
SSO.ENABLEDFalseSSO aktivieren.
SSO.MODE"secure""secure" (HMAC) oder "simple" (unsigned).
SSO.LOGIN_URL / SSO.LOGOUT_URLNoneWird abgemeldeten Besuchern angezeigt; standardmäßig reverse("login"/"logout").
SSO.USER_MAPid/email/usernameFastComments‑Feld zum Benutzerattribut/Pfad/Callable.
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDSNonecallable(user) oder gepunkteter Pfad.
SSO.USER_MAPPERNoneGepunkteter Pfad zu callable(user) -> dict; höchste Priorität.
WIDGET_DEFAULTS{}Konfiguration, die in jedes Widget (camelCase‑Schlüssel) zusammengeführt wird.

Beispielprojekt Internal Link

Ein ausführbares Beispiel befindet sich in example/: eine linke Leiste + Hauptbereich‑App mit einer Seite pro Widget und einer Anmeldeseite, die vorab angelegte Demo‑Benutzer auflistet.
Melden Sie sich mit einem beliebigen dieser Benutzer an und die Kommentar‑ und Live‑Chat‑Widgets authentifizieren diese Identität über Secure SSO. Aus diesem Verzeichnis:

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

Ohne ein API‑Geheimnis fällt es auf den öffentlichen demo‑Mandanten zurück (anonym).
example/browser_smoke.py ist ein Playwright‑E2E‑Test, der die Seite in einem echten Browser lädt und einen Kommentar als Secure‑SSO‑Benutzer postet.

Benötigen Sie Hilfe?

Wenn Sie auf Probleme stoßen oder Fragen zum Django-Paket haben, bitte:

Mitwirken

Beiträge sind willkommen! Bitte besuchen Sie das GitHub-Repository für Richtlinien zum Mitwirken.