FastComments.com

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

Vis på GitHub

AI-kodningsagenter Internal Link

skills.sh

Giv din kodeagent den FastComments‑kontekst, den har brug for – widgets, konfiguration, Secure SSO, REST‑API’en og SDK’erne:

npx skills add fastcomments/skills

Fungerer med Claude Code, Codex, Cursor, Copilot, Gemini og enhver anden agent, som skills CLI understøtter.

Krav Internal Link

  • Python 3.10+
  • Django 4.2, 5.0, 5.1, eller 5.2
  • Et FastComments tenant ID (brug demo for at prøve det uden en konto)
  • Et API secret er kun påkrævet for Secure SSO

Installation Internal Link

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 Internal Link

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 Internal Link

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.request i TEMPLATES["OPTIONS"]["context_processors"]
  • django.contrib.auth.middleware.AuthenticationMiddleware i MIDDLEWARE

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 Internal Link

Hver widget har sit eget tag. Alle accepterer **extra keyword-argumenter, som flettes direkte ind i widget-konfigurationen (brug camelCase-nøgler) for alt, der ikke er dækket af de navngivne argumenter nedenfor.

TagWidget
{% fastcomments %}Kommentarer
{% fastcomments_live_chat %}Live chat
{% fastcomments_comment_count %}Kommentarantal-badge
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %}Samlede kommentarantal
{% fastcomments_collab_chat target="#el" %}Samarbejdschat (inline)
{% fastcomments_image_chat target="#el" %}Chat til billedannotering
{% fastcomments_recent_comments %}Seneste kommentarer
{% fastcomments_recent_discussions %}Seneste diskussioner
{% fastcomments_reviews_summary %}Anmeldelsesoversigt
{% fastcomments_top_pages %}Mest diskuterede sider
{% fastcomments_user_activity user_id="..." %}En brugers aktivitetsfeed

Navngivne argumenter mapper til widgettens camelCase-konfigurationsnøgler:

ArgumentKonfigurationsnøgleTags
url_idurlIdcomments, live chat, comment count, collab/image chat, recent comments, reviews summary
urlurlcomments, live chat, collab/image chat
readonlyreadonlycomments, live chat, collab/image chat
localelocalecomments, live chat, collab/image chat, user activity
has_dark_backgroundhasDarkBackgroundalle
default_sort_directiondefaultSortDirectioncomments, live chat, collab/image chat
number_onlynumberOnlycomment count
is_liveisLivecomment count
countcountrecent comments, recent discussions
target(querySelector, sendes ikke)collab chat, image chat
chat_square_percentagechatSquarePercentageimage chat
user_iduserIduser 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 %}

{# Collab chat knytter sig til et eksisterende element på siden #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}

{# Samlede antal: placér markører, og én bulk-loader udfylder dem alle #}
{% 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) Internal Link

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 id bevidst. FastComments id er den permanente håndtag for en brugers kommentarthistorik. Standard-USER_MAP kortlæ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 brugers id opdeler deres historik i en ny konto). For alt ud over en demo, kortlæg id til 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 Internal Link

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 Internal Link

Indstil REGION for at rute widgets og API til EU:

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

Tilpasning af embed-markup Internal Link

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 Internal Link

KeyDefaultDescription
TENANT_ID""Dit FastComments tenant‑ID (demo til test).
API_KEY""Din API‑hemmelighed. Signerer Secure SSO og godkender admin().
REGIONNoneNone for USA, "eu" for EU‑regionen.
SSO.ENABLEDFalseAktiver SSO.
SSO.MODE"secure""secure" (HMAC) eller "simple" (uden signatur).
SSO.LOGIN_URL / SSO.LOGOUT_URLNoneVises for brugere som er logget ud; standard er reverse("login"/"logout").
SSO.USER_MAPid/email/usernameFastComments‑felt til bruger‑attribut/sti/kaldbar.
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDSNonecallable(user) eller punktnotationsti.
SSO.USER_MAPPERNonePunktnotationsti til callable(user) -> dict; højeste præcedens.
WIDGET_DEFAULTS{}Konfiguration flettet ind i hver widget (camelCase‑nøgler).

Eksempelprojekt Internal Link

Et kørbart showcase findes i example/: en app med venstre-menu og hovedvindue, med en side pr. widget og en log-ind-side med forudoprettede demo-brugere. Log ind som en af dem, og kommentar- og live-chat-widgetterne autentificerer denne 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-hemmelighed falder den tilbage til den offentlige demo-tenant (anonym). 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.