FastComments.com

Dodajte komentare u vašu Django aplikaciju

Ово је званични Django пакет за FastComments.

Коментари уживо и компоненте за ћаскање са безбедним SSO преко шаблонских ознака.

Репозиторијум

Погледајте на GitHub


Zahtevi Internal Link


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

Instalacija Internal Link


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

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

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


Подесите вашег тенанта у settings.py:

import os

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

Убаците виџет у било који шаблон:

{% load fastcomments %}

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

Preduslovi za automatski SSO Internal Link


Da biste automatski prosledili prijavljenog korisnika widgetu, tagovi čitaju trenutnog korisnika iz zahteva. Uverite se da vaš projekat ima oba ova podešavanja (podrazumevano su 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 izričito proslediti korisnika: {% fastcomments user=some_user %}.

Oznake vidžeta 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.

TagWidget
{% fastcomments %}Komentari
{% fastcomments_live_chat %}Uživo čet
{% fastcomments_comment_count %}Značka broja komentara
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %}Skupni brojevi komentara
{% fastcomments_collab_chat target="#el" %}Kolaborativni (inline) čet
{% fastcomments_image_chat target="#el" %}Čet za anotaciju slika
{% fastcomments_recent_comments %}Nedavni komentari
{% fastcomments_recent_discussions %}Nedavne diskusije
{% fastcomments_reviews_summary %}Pregled recenzija
{% fastcomments_top_pages %}Najviše diskutovane stranice
{% fastcomments_user_activity user_id="..." %}Tok aktivnosti korisnika

Named arguments map to the widget's camelCase config keys:

ArgumentConfig keyTags
url_idurlIdkomentari, uživo čet, broj komentara, kolaborativni/čet za slike, nedavni komentari, pregled recenzija
urlurlkomentari, uživo čet, kolaborativni/čet za slike
readonlyreadonlykomentari, uživo čet, kolaborativni/čet za slike
localelocalekomentari, uživo čet, kolaborativni/čet za slike, aktivnost korisnika
has_dark_backgroundhasDarkBackgroundsve
default_sort_directiondefaultSortDirectionkomentari, uživo čet, kolaborativni/čet za slike
number_onlynumberOnlybroj komentara
is_liveisLivebroj komentara
countcountnedavni komentari, nedavne diskusije
target(querySelector, not sent)kolaborativni čet, čet za slike
chat_square_percentagechatSquarePercentagečet za slike
user_iduserIdaktivnost korisnika

Examples:

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

{# Kolaborativni čet se prikači na postojeći element na stranici #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}

{# Skupni brojevi: postavite markere, zatim jedan skupni učitač popuni sve #}
{% 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 serveru koristeći HMAC‑SHA256 sa 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"],   # vaš API tajni ključ; potpisuje Secure SSO
    "SSO": {
        "ENABLED": True,
        "MODE": "secure",                            # "secure" | "simple"
        # Mapirajte FastComments polja na vaš korisnički model. Vrednosti mogu biti atribut
        # ime, putu razdvojenom tačkama ("profile.avatar_url"), poziv(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,      # poziv(user) -> bool, ili put razdvojen tačkama
        "IS_MODERATOR": None,
        "GROUP_IDS": None,                           # poziv(user) -> list, ili put razdvojen tačkama
    },
}

Izaberite SSO id namerno. FastComments id je trajni identifikator za istoriju komentara korisnika. Podrazumevani USER_MAP ga mapira na vaš Django primarni ključ radi praktičnosti bez dodatne konfiguracije, ali sekvencijalni integer PK‑ovi su brojivi i teško ih je menjati kasnije (promena id korisnika deli njihovu istoriju u novi nalog). Za sve što prevazilazi demo, mapirajte id na stabilnu, neprozirnu vrednost izabranu unapred (UUID ili posvećeni javni id), i nikada ne stavljajte privatne podatke u njega. Primer aplikacije koristi id zasnovan na korisničkom imenu iz ovog 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 koji nisu prijavljeni podrazumevano su reverse("login") / reverse("logout"); možete ih prepisati koristeći SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].

Prilagođeno mapiranje

Postoje dve opcije višeg prioriteta koje nadmašuju USER_MAP:

  • Metod na vašem korisničkom modelu (Python analog interfejsa):

    class User(AbstractUser):
        def to_fastcomments_user_data(self):
            return {"id": self.pk, "email": self.email, "username": self.get_username()}
  • Globalni mapirator, put razdvojen 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 strani servera Internal Link

Sa instaliranim dodatkom [api], позовите FastComments REST API преко SDK‑а, који је унапред конфигурисан са вашим API кључем и регионом:

from fastcomments_django import admin, public_api, get_manager

admin().get_comments("YOUR_TENANT_ID", ...)     # аутентификовано (DefaultApi)
public_api().get_comments_public(...)            # јавно (PublicApi)

# Генерисати SSO токен за API позиве или предају клијенту:
token = get_manager().sso().token_for(request.user)

EU region Internal Link


Postavite REGION da usmerite vidžete i API na EU:

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

Prilagođavanje embed koda Internal Link


Zamenite fastcomments/widget.html tako što ćete postaviti svoju kopiju ranije na putanju za pretragu š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 tenant ID (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 korisničkog atributa/putanje/funkcije.
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDSNonecallable(user) ili putanja sa tačkama.
SSO.USER_MAPPERNonePutanja sa tačkama do callable(user) -> dict; najviši prioritet.
WIDGET_DEFAULTS{}Konfiguracija spojena u svaki widget (camelCase ključevi).

Primer projekta Internal Link


Pokretljiva demonstracija se nalazi u example/: aplikacija sa levim panelom + glavnom scenom sa stranicom po widgetu i stranicom za prijavu koja prikazuje unapred semplovane demo korisnike. Prijavite se kao bilo koji od njih i widgeti za komentare i live‑chat autentišu taj identitet putem Secure SSO. Iz tog direktorijuma:

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

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

Потребна помоћ?

Ако наилазите на било какве проблеме или имате питања у вези са Django пакетом, молимо вас:

Допринесите

Доприноси су добродошли! Молимо посетите GitHub репозиторијум за смернице о доприносу.