FastComments.com

Dodajte komentare u svoju Django aplikaciju

Ovo je službeni Django paket za FastComments.

Komponente za komentiranje uživo i chat s sigurnim SSO‑om putem oznaka predložaka.

Repozitorij

Pogledaj na GitHubu

AI agenti za kodiranje Internal Link

skills.sh

Dajte svom programskom agentu FastComments kontekst koji mu je potreban – widgete, konfiguraciju, Secure SSO, REST API i SDK‑ove:

npx skills add fastcomments/skills

Radi s Claude Code, Codex, Cursor, Copilot, Gemini i svim ostalim agentima koje podržava skills CLI.

Zahtjevi Internal Link

  • Python 3.10+
  • Django 4.2, 5.0, 5.1, ili 5.2
  • FastComments tenant ID (koristite demo da ga isprobate bez računa)
  • API tajna je potrebna samo za Secure SSO

Instalacija Internal Link

Instaliraj iz oznake izdanja (ovaj projekt distribuira se putem git oznaka, a ne putem PyPI):

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

Za pristup REST s poslužitelja (pomoćni programi admin() / public_api()), dodaj api dodatak, koji učitava generirani klijent SDK-a:

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

Dodaj aplikaciju u INSTALLED_APPS:

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

Brzi početak Internal Link

Konfigurirajte svoj tenant u settings.py:

import os

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

Umetnite widget u bilo koji predložak:

{% load fastcomments %}

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

Preduvjeti za automatski SSO Internal Link

Kako bi se automatski proslijedio prijavljeni korisnik widgetu, oznake čitaju trenutnog korisnika iz zahtjeva. Provjerite da vaš projekt ima oboje (standardni Django projekt ih ima po zadanom):

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

Bez zahtjeva u kontekstu predloška, widgeti se renderaju za anonimnog posjetitelja. Uvijek možete izričito proslijediti korisnika: {% fastcomments user=some_user %}.

Oznake widgeta Internal Link

Svaki widget ima svoju oznaku. Sve one prihvaćaju **extra ključne argumente, koji se spajaju u konfiguraciju widgeta onakvima kakvi jesu (koristite camelCase ključeve) za sve što nije pokriveno imenovanim argumentima u nastavku.

OznakaWidget
{% fastcomments %}Komentari
{% fastcomments_live_chat %}Live chat
{% fastcomments_comment_count %}Bedž broja komentara
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %}Brojači komentara u grupi
{% fastcomments_collab_chat target="#el" %}Suradnički (inline) chat
{% fastcomments_image_chat target="#el" %}Chat s bilješkama na slikama
{% fastcomments_recent_comments %}Nedavni komentari
{% fastcomments_recent_discussions %}Nedavne rasprave
{% fastcomments_reviews_summary %}Sažetak recenzija
{% fastcomments_top_pages %}Najraspravljanije stranice
{% fastcomments_user_activity user_id="..." %}Feed aktivnosti korisnika

Imenovani argumenti mapiraju se na camelCase ključeve konfiguracije widgeta:

ArgumentKljuč konfiguracijeOznake
url_idurlIdkomentari, live chat, brojač komentara, collab/image chat, nedavni komentari, sažetak recenzija
urlurlkomentari, live chat, collab/image chat
readonlyreadonlykomentari, live chat, collab/image chat
localelocalekomentari, live chat, collab/image chat, aktivnost korisnika
has_dark_backgroundhasDarkBackgroundsve
default_sort_directiondefaultSortDirectionkomentari, live chat, collab/image chat
number_onlynumberOnlybrojač komentara
is_liveisLivebrojač komentara
countcountnedavni komentari, nedavne rasprave
target(querySelector, ne šalje se)collab chat, image chat
chat_square_percentagechatSquarePercentageimage chat
user_iduserIdaktivnost korisnika

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

Omogućite SSO i odaberite način rada u settings.py. Secure SSO potpisuje korisnika na strani poslužitelja pomoću HMAC-SHA256 s vašim API tajnim ključem i preporučuje se.

FASTCOMMENTS = {
    "TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
    "API_KEY": os.environ["FASTCOMMENTS_API_KEY"],   # your API secret; signs Secure SSO
    "SSO": {
        "ENABLED": True,
        "MODE": "secure",                            # "secure" | "simple"
        # Map FastComments fields to your user model. Values may be an attribute
        # name, a dotted path ("profile.avatar_url"), a callable(user), or 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, or dotted path
        "IS_MODERATOR": None,
        "GROUP_IDS": None,                           # callable(user) -> list, or dotted path
    },
}

Svjesno odaberite SSO id. FastComments id je trajni identifikator povijesti komentara korisnika. Zadani USER_MAP preslikava ga na vaš Django primarni ključ radi praktičnosti bez konfiguracije, ali sekvencijalni cjelobrojni PK-ovi su pogodni za pogađanje i teško ih je kasnije promijeniti (promjena id korisnika razdvaja njegovu povijest u novi račun). Za bilo što iznad demonstracije, preslikajte id na stabilnu, neprozirnu vrijednost odabranu unaprijed (UUID ili namjenski javni id) i nikada ne stavljajte privatne podatke u njega. Primjer aplikacije iz tog razloga koristi id temeljen na korisničkom imenu.

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 prikazani posjetiteljima koji nisu prijavljeni zadano su reverse("login") / reverse("logout"); nadjačajte ih s SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].

Prilagođeno preslikavanje

Dvije opcije višeg prioriteta nadjačavaju USER_MAP:

  • Metoda na vašem korisničkom modelu (Pythonov analog sučelja):

    class User(AbstractUser):
        def to_fastcomments_user_data(self):
            return {"id": self.pk, "email": self.email, "username": self.get_username()}
  • Globalni mapper, točkasta 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 strani poslužitelja Internal Link

S instaliranim dodatkom [api], pozovite FastComments REST API putem SDK-a, pre‑konfiguriranog s vašim API ključem i regijom:

from fastcomments_django import admin, public_api, get_manager

admin().get_comments("YOUR_TENANT_ID", ...)     # autentificirano (DefaultApi)
public_api().get_comments_public(...)            # javno (PublicApi)

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

EU regija Internal Link

Postavite REGION da usmjerite widgete i API na EU:

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

Prilagodba ugrađenog markup-a Internal Link

Zamijenite fastcomments/widget.html stavljanjem vlastite kopije ranije u put pretraživanja predložaka (projekt templates/fastcomments/widget.html). Ovo je Django analog Laravelovog vendor:publish --tag=fastcomments-views.

Referenca postavki Internal Link

KeyDefaultDescription
TENANT_ID""Vaš FastComments tenant ID (demo za testiranje).
API_KEY""Vaš API tajni ključ. Potpisuje Secure SSO i autentificira admin().
REGIONNoneNone za US, "eu" za EU regiju.
SSO.ENABLEDFalseUključite SSO.
SSO.MODE"secure""secure" (HMAC) ili "simple" (nepotpisano).
SSO.LOGIN_URL / SSO.LOGOUT_URLNonePrikazano odjavljenim posjetiteljima; zadano na reverse("login"/"logout").
SSO.USER_MAPid/email/usernameFastComments polje na atribut/put/poziv korisnika.
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDSNonecallable(user) ili točka‑odvojeni put.
SSO.USER_MAPPERNoneTočka‑odvojeni put do callable(user) -> dict; najviši prioritet.
WIDGET_DEFAULTS{}Konfiguracija spojena u svaki widget (ključevi u camelCase).

Primjer projekta Internal Link

Pokretljivi showcase nalazi se u example/: aplikacija s lijevom trakom + glavnom pozornicom s po jednom stranicom po widgetu i stranicom za prijavu koja prikazuje unaprijed postavljene demo korisnike.
Prijavite se kao bilo koji od njih i widgeti za komentare i live‑chat autentificiraju taj identitet putem Secure SSO. Iz tog direktorija:

python manage.py migrate
# Koristite vlastiti najmodavac da vidite Secure SSO u akciji (API tajna to omogućuje):
FASTCOMMENTS_TENANT_ID=... FASTCOMMENTS_API_KEY=... python manage.py runserver

Bez API tajne vraća se na javnog demo najmodavca (anonimno).
example/browser_smoke.py je Playwright e2e koji učitava stranicu u stvarnom pregledniku i objavljuje komentar kao Secure-SSO korisnik.

Potrebna pomoć?

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

Doprinos

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