FastComments.com

Dodajte komentare u vašu Django aplikaciju


Ovo je zvanični Django paket za FastComments.

Komponente za uživo komentarisanje i chat sa sigurnim SSO putem template tagova.

Repozitorij

View on GitHub


Zahtevi Internal Link


  • Python 3.10+
  • Django 4.2, 5.0, 5.1, ili 5.2
  • FastComments ID zakupca (koristite demo da probate bez naloga)
  • API tajna je potrebna samo za Secure SSO

Instalacija Internal Link


Instalirajte iz tag‑a za izdanje (ovaj projekat se distribuira putem git tagova, a ne putem PyPI):

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

Za server‑side REST pristup (pomoćnice admin() / public_api()), dodajte api dodatak, koji učitava generisani klijent SDK‑a:

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

Dodajte aplikaciju u INSTALLED_APPS:

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

Brzi početak Internal Link


Konfigurišite vaš tenant u settings.py:

import os

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

Ubacite widget u bilo koji šablon:

{% load fastcomments %}

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

Preduslovi za automatski SSO Internal Link


Da biste automatski proslijedili ulogovanog korisnika widgetu, oznake čitaju trenutnog korisnika iz zahtjeva. Uverite se da vaš projekt ima oba ova (ona su podrazumevano uključena u standardnom Django projektu):

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

Bez zahtjeva u kontekstu šablona, widgeti se renderuju za anonimnog posjetioca. Uvek možete izričito proslijediti korisnika: {% fastcomments user=some_user %}.

Oznake widget‑a 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.

OznakaVidžet
{% 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:

ArgumentKljuč konfiguracijeOznake
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

Primjeri:

{% 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 attaches to an existing element on the page #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}

{# Bulk counts: place markers, then one bulk loader fills them all 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 (Jedinstveno prijavljivanje) Internal Link

Enable SSO and choose a mode in settings.py. Secure SSO signs the user server-side with HMAC-SHA256 using your API secret and is recommended.

FASTCOMMENTS = {
    "TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
    "API_KEY": os.environ["FASTCOMMENTS_API_KEY"],   # tvoj API tajni ključ; potpisuje Secure SSO
    "SSO": {
        "ENABLED": True,
        "MODE": "secure",                            # "secure" | "simple"
        # Mapiraj FastComments polja na svoj korisnički model. Vrijednosti mogu biti atribut
        # ime, dotična putanja ("profile.avatar_url"), callable(user), ili 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, ili dotična putanja
        "IS_MODERATOR": None,
        "GROUP_IDS": None,                           # callable(user) -> list, ili dotična putanja
    },
}

Odaberi SSO id svjesno. FastComments id je trajni identifikator za istoriju komentara korisnika. Zadani USER_MAP ga mapira na tvoj Django primarni ključ radi zero-config praktičnosti, ali sekvencijalni integer PK-ovi su izlistivi i teško je mijenjati ih kasnije (promjena id korisnika dijeli njihovu historiju u novi račun). Za sve što je izvan demo verzije, mapiraj id na stabilnu, neprozirnu vrijednost izabranu unaprijed (UUID ili posvećeni javni id), i nikada ne stavljaj privatne podatke u njega. Primjer aplikacije koristi id zasnovan na korisničkom imenu iz tog razloga.

SSO se automatski ubacuje u {% fastcomments %}, {% fastcomments_live_chat %}, {% fastcomments_collab_chat %}, {% fastcomments_image_chat %} i {% fastcomments_user_activity %} za trenutnog korisnika.

Login/logout URLs shown to signed-out visitors default to reverse("login") / reverse("logout"); override them with SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].

Prilagođeno mapiranje

Dve opcije višeg priorитета imaju prednost nad USER_MAP:

  • Metod na tvom korisničkom modelu (Python analog interface-a):

    class User(AbstractUser):
        def to_fastcomments_user_data(self):
            return {"id": self.pk, "email": self.email, "username": self.get_username()}
  • Globalni mapper, dotična putanja do callable(user) -> dict:

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

Prioritet je USER_MAPPER > to_fastcomments_user_data() > USER_MAP.

Pristup API‑ju na serveru Internal Link

Sa instaliranim dodatkom [api], pozovite FastComments REST API kroz SDK, pre‑konfigurisan s vašim API ključem i regijom:

from fastcomments_django import admin, public_api, get_manager

admin().get_comments("YOUR_TENANT_ID", ...)     # autentifikovan (DefaultApi)
public_api().get_comments_public(...)            # javni (PublicApi)

# Generišite SSO token za API pozive ili predaju klijentu:
token = get_manager().sso().token_for(request.user)

EU region Internal Link

Postavite REGION da usmerite widgete i API na EU:

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

Prilagođavanje markup‑a za ugradnju Internal Link


Zamijenite fastcomments/widget.html tako što ćete svoju kopiju postaviti ranije u putanju pretrage šablona (projekat templates/fastcomments/widget.html). Ovo je Django analog Laravel‑ovog vendor:publish --tag=fastcomments-views.

Referenca postavki Internal Link

KeyDefaultDescription
TENANT_ID""Vaš FastComments tenant ID (demo za testiranje).
API_KEY""Vaša API tajna. Potpisuje Secure SSO i autentikuje admin().
REGIONNoneNone za SAD, "eu" za EU regiju.
SSO.ENABLEDFalseUključite SSO.
SSO.MODE"secure""secure" (HMAC) ili "simple" (nepotpisano).
SSO.LOGIN_URL / SSO.LOGOUT_URLNonePrikazano posjetiocima koji su odjavljeni; podrazumevano na reverse("login"/"logout").
SSO.USER_MAPid/email/usernameFastComments polje za korisnički atribut/put/poziv.
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDSNonecallable(user) ili put sa tačkama.
SSO.USER_MAPPERNonePut sa tačkama do callable(user) -> dict; najviši prioritet.
WIDGET_DEFAULTS{}Konfiguracija spajana u svaki widget (camelCase ključevi).

Primer projekta 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. Sign in as any of them and the comment and live-chat widgets authenticate that identity via Secure SSO. From that directory:

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

Without an API secret it falls back to the public demo tenant (anonymous). example/browser_smoke.py is a Playwright e2e that loads the page in a real browser and posts a comment as the Secure-SSO user.

Potrebna pomoć?

Ako naiđete na bilo kakve probleme ili imate pitanja o Django paketu, molimo vas:

Doprinos

Doprinosi su dobrodošli! Molimo posjetite GitHub repository za smjernice o doprinosu.