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


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",
]

Hitri 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 samodejno 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 (Enotna prijava) 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"],   # vaš API skrivni ključ; podpira Secure SSO
    "SSO": {
        "ENABLED": True,
        "MODE": "secure",                            # "secure" | "simple"
        # Preslikajte polja FastComments v vaš uporabniški model. Vrednosti so lahko atribut
        # ime, pot v obliki točk ("profile.avatar_url"), klicna funkcija(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,      # klicna funkcija(user) -> bool, ali pot v obliki točk
        "IS_MODERATOR": None,
        "GROUP_IDS": None,                           # klicna funkcija(user) -> list, ali pot v obliki točk
    },
}

Izberite SSO id namerno. FastComments id je trajen identifikator za zgodovino komentarjev uporabnika. Privzeti USER_MAP ga preslika v vaš Django primarni ključ za priročnost brez dodatne konfiguracije, vendar so zaporedni celoštevilski PK-ji preštevljivi in jih je kasneje težko spremeniti (sprememba uporabnikovega id razdeli njihovo zgodovino v nov račun). Za vse, kar presega demo, preslikajte id v stabilno, neprozorno vrednost, izbrano vnaprej (UUID ali namenski javni id), in v njem nikoli ne shranjujte zasebnih podatkov. Primerna aplikacija uporablja za to namen ID, ki temelji na uporabniškem imenu.

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

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

Prilagojeno preslikovanje

Dve možnosti z višjo prednostjo presegata USER_MAP:

  • Metoda v vašem uporabniškem modelu (Pythonic analog vmesnika):

    class User(AbstractUser):
        def to_fastcomments_user_data(self):
            return {"id": self.pk, "email": self.email, "username": self.get_username()}
  • Globalni preslikovalec, pot v obliki točk do callable(user) -> dict:

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

Prednost je USER_MAPPER > to_fastcomments_user_data() > USER_MAP.

Dostop do strežniškega API-ja Internal Link

With the [api] extra installed, call the FastComments REST API through the SDK, pre-configured with your API key and region:

from fastcomments_django import admin, public_api, get_manager

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

# Ustvari SSO žeton za API klice ali prenos stranke:
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.