FastComments.com

Dodajte komentarje v svojo Django aplikacijo

To je uradni paket Django za FastComments.

Komponente za komentarje v realnem času in klepet z varnim SSO prek oznak predloge.

Repository

Poglej na GitHubu

AI kodirni agenti Internal Link

skills.sh

Dajte vašemu programskemu agentu kontekst FastComments, ki ga potrebuje – gradnike, konfiguracijo, varno SSO, REST API in SDK-je:

npx skills add fastcomments/skills

Deluje s Claude Code, Codex, Cursor, Copilot, Gemini in vsakim drugim agentom, ki ga podpira skills CLI.

Zahteve Internal Link

  • Python 3.10+
  • Django 4.2, 5.0, 5.1, ali 5.2
  • ID najemnika FastComments (uporabite demo, da ga preizkusite brez računa)
  • API skrivnost je potrebna le za Secure SSO

Namestitev Internal Link

Namestite iz oznake izdaj (ta projekt je distribuiran prek git oznak, ne preko PyPI):

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

Za strežniški REST dostop (pomožna orodja admin() / public_api()), dodajte api dodatno komponento, ki naloži generiranega odjemalca SDK:

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

Dodajte aplikacijo v INSTALLED_APPS:

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

Hiter začetek Internal Link

Konfigurirajte svoj najemnik v settings.py:

import os

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

Vstavite widget v katerokoli predlogo:

{% load fastcomments %}

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

Predpogoji za samodejni SSO Internal Link

Za samodejno posredovanje prijavljenega uporabnika widgetu oznake preberejo trenutnega uporabnika iz zahteve. Prepričajte se, da vaš projekt vsebuje oboje (so privzeto vključeni v standardnem projektu Django):

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

Brez zahteve v kontekstu predloge se widgeti prikažejo za anonimnega obiskovalca. Vedno lahko uporabnika izrecno posredujete: {% fastcomments user=some_user %}.

Oznake pripomočkov Internal Link

Vsak gradnik ima svojo oznako. Vsi sprejemajo ključne argumente **extra, ki se združijo v konfiguracijo gradnika brez sprememb (uporabite camelCase ključe) za vse, kar ni zajeto v spodnjih imenovanih argumentih.

OznakaGradnik
{% 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

Imenovani argumenti se preslikajo v camelCase ključe konfiguracije gradnika:

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

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

Omogočite SSO in izberite način v settings.py. Varni SSO podpiše uporabnika na strani strežnika s HMAC-SHA256 z vašim API skrivnim ključem in je priporočen.

FASTCOMMENTS = {
    "TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
    "API_KEY": os.environ["FASTCOMMENTS_API_KEY"],   # vaš API skrivni ključ; podpisuje Varni SSO
    "SSO": {
        "ENABLED": True,
        "MODE": "secure",                            # "secure" | "simple"
        # Preslikajte polja FastComments na svoj uporabniški model. Vrednosti so lahko
        # ime atributa, pot s pikami ("profile.avatar_url"), callable(user) ali 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, ali pot s pikami
        "IS_MODERATOR": None,
        "GROUP_IDS": None,                           # callable(user) -> list, ali pot s pikami
    },
}

Premislite o izbiri SSO id. FastComments id je trajna referenca za zgodovino komentarjev uporabnika. Privzeti USER_MAP ga preslika na vaš Django primarni ključ za udobje brez nastavitev, a zaporedne celoštevilčne PK so preštevljivi in jih je kasneje težko spremeniti (sprememba id uporabnika razdeli njegovo zgodovino v nov račun). Za karkoli več od demo aplikacije preslikajte id na stabilno, neopisljivo vrednost, izbrano vnaprej (UUID ali namenski javni id), in vanjo nikoli ne vključite zasebnih podatkov. Primer aplikacije iz tega razloga uporablja id na osnovi uporabniškega imena.

SSO se samodejno vstavi v {% fastcomments %}, {% fastcomments_live_chat %}, {% fastcomments_collab_chat %}, {% fastcomments_image_chat %} in {% fastcomments_user_activity %} za trenutnega uporabnika.

URL-ja za prijavo/odjavo, prikazana odjavljenim obiskovalcem, privzeto uporabljata reverse("login") / reverse("logout"); preglasita ju z SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].

Preslikava po meri

Dve možnosti z višjo prednostjo imata prednost pred USER_MAP:

  • Metoda na vašem uporabniškem modelu (pythonična analogija vmesnika):

    class User(AbstractUser):
        def to_fastcomments_user_data(self):
            return {"id": self.pk, "email": self.email, "username": self.get_username()}
  • Globalni preslikovalnik, pot s pikami do callable(user) -> dict:

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

Prednost ima USER_MAPPER > to_fastcomments_user_data() > USER_MAP.

Dostop do API-ja na strežniku Internal Link

Z nameščenim dodatkom [api] lahko kličete FastComments REST API prek SDK, ki je vnaprej nastavljen z vašim API ključem in regijo:

from fastcomments_django import admin, public_api, get_manager

admin().get_comments("YOUR_TENANT_ID", ...)     # authenticated (DefaultApi)
public_api().get_comments_public(...)            # public (PublicApi)

# Generate an SSO token for API calls or client hand-off:
token = get_manager().sso().token_for(request.user)

EU regija Internal Link

Nastavite REGION, da usmerite gradnike in API v EU:

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

Prilagajanje vdelane oznake Internal Link

Preglasite fastcomments/widget.html tako, da postavite svojo kopijo prej v poti iskanja predlog (v projektu templates/fastcomments/widget.html). To je Django analog Laravelovega vendor:publish --tag=fastcomments-views.

Referenca nastavitev Internal Link

KeyDefaultDescription
TENANT_ID""Vaš FastComments identifikator najemnika (demo za testiranje).
API_KEY""Vaše API skrivnost. Podpisuje Secure SSO in avtenticira admin().
REGIONNoneNone za ZDA, "eu" za EU regijo.
SSO.ENABLEDFalseOmogoči SSO.
SSO.MODE"secure""secure" (HMAC) ali "simple" (nepodpisano).
SSO.LOGIN_URL / SSO.LOGOUT_URLNonePrikazano obiskovalcem, ki so odjavljeni; privzeto na reverse("login"/"logout").
SSO.USER_MAPid/email/usernameFastComments polje do uporabniškega atributa/poti/klicne funkcije.
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDSNonecallable(user) ali pot z ločnicami.
SSO.USER_MAPPERNonePot z ločnicami do callable(user) -> dict; najvišja prednost.
WIDGET_DEFAULTS{}Konfiguracija, združena v vsak widget (ključi v camelCase).

Primer projekta Internal Link

Izvedljiva predstavitev se nahaja v example/: lev stolpec + glavni oder
aplikacija z eno stranjo na pripomoček in prijavno stranjo, ki prikazuje vnaprej vnešene demo uporabnike.
Prijavite se kot kateri koli od njih, in pripomočki za komentarje ter klepet v živo overijo to
identiteto prek Secure SSO. Iz tega direktorija:

python manage.py migrate
# Uporabite svoj najemnik, da vidite Secure SSO v delovanju (API skrivnost ga omogoča):
FASTCOMMENTS_TENANT_ID=... FASTCOMMENTS_API_KEY=... python manage.py runserver

Brez API skrivnosti se vrne na javnega demo najemnika (anonimen).
example/browser_smoke.py je Playwright e2e
ki naloži stran v pravem brskalniku in objavi komentar kot Secure-SSO
uporabnik.

Potrebujete pomoč?

Če naletite na kakršnekoli težave ali imate vprašanja o paketu Django, prosimo:

Prispevanje

Prispevki so dobrodošli! Prosimo, obiščite repozitorij na GitHubu za smernice za prispevanje.