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


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

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.

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

Omogućite SSO i odaberite način u settings.py. Secure SSO potpisuje korisnika na serverskoj strani koristeći 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
    },
}

Odaberite SSO id svjesno. FastComments id je stalni
upravljač za povijest komentara korisnika. Zadani USER_MAP ga mapira na vaš
Django primarni ključ radi nulte konfiguracije, ali sekvencijalni cijeli PK‑ovi su
enumerabilni i teško ih je kasnije promijeniti (promjena id korisnika razdvaja
njihovu povijest u novi račun). Za sve izvan demonstracije, mapirajte id na stabilnu,
neprozirnu vrijednost odabranu unaprijed (UUID ili posvećeni javni id), i nikada ne
stavljajte privatne podatke u njega. Primjer aplikacije koristi id temeljen na
korisničkom imenu iz tog razloga.

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

URL‑ovi za prijavu/odjavu prikazani neprijavljenim posjetiteljima zadano su reverse("login") / reverse("logout"); prepišite ih s SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].

Custom mapping

Dvije opcije višeg prioriteta imaju prednost nad USER_MAP:

  • Metoda na vašem korisničkom modelu (Python 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čkasti put 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 ugradbenog 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.