FastComments.com

Dodajte komentare u svoju Django aplikaciju


Ovo je zvanični Django paket za FastComments.

Komponente za komentarisanje u realnom vremenu i chat sa sigurnim SSO putem template tagova.

Repository

Pogledaj na GitHubu


Zahtevi Internal Link


  • Python 3.10+
  • Django 4.2, 5.0, 5.1, ili 5.2
  • FastComments tenant ID (koristite demo da ga isprobate bez naloga)
  • API secret je potreban samo za Secure SSO

Instalacija Internal Link


Instalirajte sa oznakom izdanja (ovaj projekat se distribuira preko git oznaka, a ne putem PyPI):

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

Za pristup REST-u na serveru (pomoćnici admin() / public_api()), dodajte api dodatak, koji učitava generisanog klijenta 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

Configure your tenant in settings.py:

import os

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

Drop the widget into any template:

{% load fastcomments %}

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

Preduslovi za automatski SSO Internal Link

Da biste automatski prosledili ulogovanog korisnika widgetu, oznake čitaju
trenutnog korisnika iz zahteva. Uverite se da vaš projekat ima oba (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 zahteva u kontekstu šablona, widgeti se renderuju za anonimnog
posetioca. Uvek možete eksplicitno proslediti korisnika: {% fastcomments user=some_user %}.

Tagovi widgeta Internal Link

Svaki vidžet ima svoj tag. Svi oni prihvataju **extra ključne argumente, koji se spajaju u konfiguraciju vidžeta takvu kakvu jeste (koristite camelCase ključeve) za sve što nije pokriveno imenovanim argumentima ispod.

OznakaVidžet
{% fastcomments %}Komentari
{% fastcomments_live_chat %}Živi razgovor
{% fastcomments_comment_count %}Značka broja komentara
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %}Skupni brojevi komentara
{% fastcomments_collab_chat target="#el" %}Kolaborativni (ugrađeni) chat
{% fastcomments_image_chat target="#el" %}Chat za anotaciju slika
{% fastcomments_recent_comments %}Nedavni komentari
{% fastcomments_recent_discussions %}Nedavne diskusije
{% fastcomments_reviews_summary %}Sažetak recenzija
{% fastcomments_top_pages %}Najviše diskutovane stranice
{% fastcomments_user_activity user_id="..." %}Tok aktivnosti korisnika

Imenovani argumenti mapiraju na camelCase ključeve konfiguracije vidžeta:

ArgumentKljuč konfiguracijeTagovi
url_idurlIdkomentari, živi razgovor, broj komentara, kolaborativni/chat za slike, nedavni komentari, sažetak recenzija
urlurlkomentari, živi razgovor, kolaborativni/chat za slike
readonlyreadonlykomentari, živi razgovor, kolaborativni/chat za slike
localelocalekomentari, živi razgovor, kolaborativni/chat za slike, aktivnost korisnika
has_dark_backgroundhasDarkBackgroundsve
default_sort_directiondefaultSortDirectionkomentari, živi razgovor, kolaborativni/chat za slike
number_onlynumberOnlybroj komentara
is_liveisLivebroj komentara
countcountnedavni komentari, nedavne diskusije
target(querySelector, not sent)kolaborativni chat, chat za slike
chat_square_percentagechatSquarePercentagechat za slike
user_iduserIdaktivnost korisnika

Primeri:

{% 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 (Jedinstvena prijava) Internal Link

Omogućite SSO i izaberite režim u settings.py. Secure SSO potpisuje korisnika na server‑side koristeći HMAC‑SHA256 i vaš API tajni i preporučuje se.

FASTCOMMENTS = {
    "TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
    "API_KEY": os.environ["FASTCOMMENTS_API_KEY"],   # vaš API tajni; potpisuje Secure SSO
    "SSO": {
        "ENABLED": True,
        "MODE": "secure",                            # "secure" | "simple"
        # Mapirajte FastComments polja na vaš model korisnika. Vrednosti mogu biti atribut
        # ime, putanja sa tačkama ("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 putanja sa tačkama
        "IS_MODERATOR": None,
        "GROUP_IDS": None,                           # callable(user) -> list, ili putanja sa tačkama
    },
}

Pažljivo izaberite SSO id. FastComments id je trajni identifikator za istoriju komentara korisnika. Podrazumevani USER_MAP mapira ga na vaš Django primarni ključ radi praktičnosti bez podešavanja, ali sekvencijalni integer PK‑ovi su izlistivi i teški za promenu kasnije (promena id‑a korisnika deli njihovu istoriju u novi nalog). Za sve što nije demo, mapirajte id na stabilnu, neprozirnu vrednost izabranu unapred (UUID ili poseban javni id), i nikada ne stavljajte privatne podatke u njega. Primer 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.

URL‑ovi za prijavu/odjavu koji se prikazuju posetiocima bez naloga podrazumevano su reverse("login") / reverse("logout"); možete ih zameniti sa SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].

Prilagođeno mapiranje

Dve opcije većeg prioriteta imaju prednost nad USER_MAP:

  • Metoda na vašem modelu korisnika (Pythonic analog interfejsa):

    class User(AbstractUser):
        def to_fastcomments_user_data(self):
            return {"id": self.pk, "email": self.email, "username": self.get_username()}
  • Globalni mapper, putanja sa tačkama 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 serverskoj strani Internal Link

Sa instaliranim dodatkom [api], pozovite FastComments REST API preko SDK‑a, unapred konfigurisanog sa vašim API ključem i regionom:

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 prepuštanje klijentu:
token = get_manager().sso().token_for(request.user)

EU region Internal Link


Postavite REGION da usmerite widgete i API ka EU:

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

Prilagođavanje embed markup-a Internal Link


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

Referenca podešavanja Internal Link

KljučPodrazumevanoOpis
TENANT_ID""Vaš FastComments ID zakupca (demo za testiranje).
API_KEY""Vaša API tajna. Potpisuje Secure SSO i autentifikuje admin().
REGIONNoneNone za SAD, "eu" za EU region.
SSO.ENABLEDFalseUključite SSO.
SSO.MODE"secure""secure" (HMAC) ili "simple" (nepotpisano).
SSO.LOGIN_URL / SSO.LOGOUT_URLNonePrikazano posetiocima koji su odjavljeni; podrazumevano na reverse("login"/"logout").
SSO.USER_MAPid/email/usernameFastComments polje do atributa/puteve/funkcije korisnika.
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 koja se spaja u svaki widget (ključevi u camelCase formatu).

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.

Treba li pomoć?

Ako naiđete na bilo kakve probleme ili imate pitanja u vezi sa Django paketom, molimo vas:

Doprinos

Doprinosi su dobrodošli! Molimo vas da posetite GitHub repozitorijum za smernice o doprinosu.