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


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

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.

TagWidget
{% 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:

ArgumentConfig keyTags
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_backgroundhasDarkBackgroundall
default_sort_directiondefaultSortDirectioncomments, live chat, collab/image chat
number_onlynumberOnlycomment count
is_liveisLivecomment count
countcountrecent comments, recent discussions
target(querySelector, not sent)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 %}

{# 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) 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

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.