
Język 🇵🇱 Polski
Dokumentacja
Rozpoczęcie
Użycie
Referencja API
Dodaj komentarze do swojej aplikacji Django
This is the official Django Package for FastComments.
Live commenting and chat components with Secure SSO via template tags.
Repository
Wymagania 
- Python 3.10+
- Django 4.2, 5.0, 5.1, or 5.2
- Identyfikator najemcy FastComments (użyj
demo, aby wypróbować bez konta) - Tajny klucz API jest wymagany tylko dla Secure SSO
Instalacja 
Install from a release tag (this project is distributed via git tags, not PyPI):
pip install "git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
For server-side REST access (the admin() / public_api() helpers), add the
api extra, which pulls in the SDK's generated client:
pip install "fastcomments-django[api] @ git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
Add the app to INSTALLED_APPS:
INSTALLED_APPS = [
# ...
"fastcomments_django",
]
Szybki start 
Skonfiguruj swojego najemcę w settings.py:
import os
FASTCOMMENTS = {
"TENANT_ID": os.environ.get("FASTCOMMENTS_TENANT_ID", "demo"),
}
Umieść widget w dowolnym szablonie:
{% load fastcomments %}
{% fastcomments url_id="my-page" %}
Wymagania wstępne dla automatycznego SSO 
Aby automatycznie przekazać zalogowanego użytkownika do widgetu, tagi odczytują bieżącego użytkownika z żądania. Upewnij się, że Twój projekt ma oba te elementy (są domyślnie włączone w standardowym projekcie Django):
django.template.context_processors.requestwTEMPLATES["OPTIONS"]["context_processors"]django.contrib.auth.middleware.AuthenticationMiddlewarewMIDDLEWARE
Bez żądania w kontekście szablonu, widgety renderują się dla anonimowego gościa. Zawsze możesz przekazać użytkownika wyraźnie: {% fastcomments user=some_user %}.
Tagi widgetu 
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.
| Znacznik | Widżet |
|---|---|
{% fastcomments %} | Komentarze |
{% fastcomments_live_chat %} | Czat na żywo |
{% fastcomments_comment_count %} | Odznaka liczby komentarzy |
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %} | Zbiorcze liczniki komentarzy |
{% fastcomments_collab_chat target="#el" %} | Współpracujący (wbudowany) czat |
{% fastcomments_image_chat target="#el" %} | Czat adnotacji obrazów |
{% fastcomments_recent_comments %} | Ostatnie komentarze |
{% fastcomments_recent_discussions %} | Ostatnie dyskusje |
{% fastcomments_reviews_summary %} | Podsumowanie recenzji |
{% fastcomments_top_pages %} | Najbardziej dyskutowane strony |
{% fastcomments_user_activity user_id="..." %} | Kanał aktywności użytkownika |
Named arguments map to the widget's camelCase config keys:
| Argument | Config key | Znaczniki |
|---|---|---|
url_id | urlId | komentarze, czat na żywo, licznik komentarzy, czat współpracy/obrazkowy, ostatnie komentarze, podsumowanie recenzji |
url | url | komentarze, czat na żywo, czat współpracy/obrazkowy |
readonly | readonly | komentarze, czat na żywo, czat współpracy/obrazkowy |
locale | locale | komentarze, czat na żywo, czat współpracy/obrazkowy, aktywność użytkownika |
has_dark_background | hasDarkBackground | wszystkie |
default_sort_direction | defaultSortDirection | komentarze, czat na żywo, czat współpracy/obrazkowy |
number_only | numberOnly | licznik komentarzy |
is_live | isLive | licznik komentarzy |
count | count | ostatnie komentarze, ostatnie dyskusje |
target | (querySelector, not sent) | czat współpracy, czat adnotacji obrazów |
chat_square_percentage | chatSquarePercentage | czat adnotacji obrazów |
user_id | userId | aktywność użytkownika |
Przykłady:
{% 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 %}
{# Czat współpracy dołącza do istniejącego elementu na stronie #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}
{# Zliczenia zbiorcze: umieść znaczniki, a następnie jeden loader zbiorczy wypełni je wszystkie #}
{% 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 (Jednokrotne logowanie) 
Enable SSO i wybierz tryb w settings.py. Secure SSO podpisuje użytkownika po stronie serwera przy użyciu HMAC‑SHA256 i Twojego sekretu API i jest zalecane.
FASTCOMMENTS = {
"TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
"API_KEY": os.environ["FASTCOMMENTS_API_KEY"], # Twój sekret API; podpisuje Secure SSO
"SSO": {
"ENABLED": True,
"MODE": "secure", # "secure" | "simple"
# Mapuj pola FastComments na swój model użytkownika. Wartości mogą być atrybutem
# nazwą, ścieżką kropkową ("profile.avatar_url"), wywoływalnym(user) lub 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, lub ścieżka kropkowa
"IS_MODERATOR": None,
"GROUP_IDS": None, # callable(user) -> list, lub ścieżka kropkowa
},
}
Wybierz identyfikator SSO
idświadomie. Identyfikator FastCommentsidjest trwałym odnośnikiem do historii komentarzy użytkownika. DomyślneUSER_MAPmapuje go na klucz główny Django dla wygody bez dodatkowej konfiguracji, ale kolejno przydzielane całkowite klucze PK są wyliczalne i trudne do późniejszej zmiany (zmianaidużytkownika dzieli ich historię na nowe konto). Dla wszystkiego poza demonstracją, mapujidna stabilną, nieprzezroczystą wartość wybraną z góry (UUID lub dedykowany publiczny identyfikator) i nigdy nie umieszczaj w nim prywatnych danych. Przykładowa aplikacja używa identyfikatora opartego na nazwie użytkownika z tego powodu.
SSO jest wstrzykiwane automatycznie do {% fastcomments %}, {% fastcomments_live_chat %}, {% fastcomments_collab_chat %}, {% fastcomments_image_chat %} i {% fastcomments_user_activity %} dla bieżącego użytkownika.
Login/logout URLs wyświetlane niezalogowanym gościom domyślnie to reverse("login") / reverse("logout"); można je zastąpić za pomocą SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].
Niestandardowe mapowanie
Dwie opcje o wyższym priorytecie mają pierwszeństwo przed USER_MAP:
-
Metoda w Twoim modelu użytkownika (pythoniczny odpowiednik interfejsu):
class User(AbstractUser): def to_fastcomments_user_data(self): return {"id": self.pk, "email": self.email, "username": self.get_username()} -
Globalny mapper, ścieżka kropkowa do
callable(user) -> dict:FASTCOMMENTS = {"SSO": {"USER_MAPPER": "myapp.sso.map_user"}}
Priorytet jest następujący: USER_MAPPER > to_fastcomments_user_data() > USER_MAP.
Dostęp do API po stronie serwera 
Po zainstalowaniu dodatku [api] wywołaj REST API FastComments poprzez SDK,
wstępnie skonfigurowane z Twoim kluczem API i regionem:
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)
Region UE 
Ustaw REGION, aby kierować widżety i API do UE:
FASTCOMMENTS = {"TENANT_ID": "...", "REGION": "eu"}
Dostosowywanie znacznika osadzania 
Zastąp fastcomments/widget.html umieszczając własną kopię wcześniej w
ścieżce wyszukiwania szablonów (w projekcie templates/fastcomments/widget.html). To jest
analog Django polecenia Laravel vendor:publish --tag=fastcomments-views.
Referencja ustawień 
| Key | Default | Description |
|---|---|---|
TENANT_ID | "" | Twój identyfikator najemcy FastComments (demo do testów). |
API_KEY | "" | Twój tajny klucz API. Podpisuje Secure SSO i uwierzytelnia admin(). |
REGION | None | None dla USA, "eu" dla regionu UE. |
SSO.ENABLED | False | Włącz SSO. |
SSO.MODE | "secure" | "secure" (HMAC) lub "simple" (niepodpisane). |
SSO.LOGIN_URL / SSO.LOGOUT_URL | None | Wyświetlane niezalogowanym odwiedzającym; domyślnie reverse("login"/"logout"). |
SSO.USER_MAP | id/email/username | Pole FastComments wskazujące na atrybut/ścieżkę/wywołanie zwrotne użytkownika. |
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDS | None | callable(user) lub ścieżka kropkowa. |
SSO.USER_MAPPER | None | Ścieżka kropkowa do callable(user) -> dict; najwyższy priorytet. |
WIDGET_DEFAULTS | {} | Konfiguracja łączona z każdym widżetem (klucze w stylu camelCase). |
Projekt przykładowy 
A runnable showcase lives in example/: a left-rail + main-stage
app with a page per widget and a sign-in page listing pre-seeded demo users.
Sign in as any of them and the comment and live-chat widgets authenticate that
identity via Secure SSO. From that directory:
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
Without an API secret it falls back to the public demo tenant (anonymous).
example/browser_smoke.py is a Playwright e2e
that loads the page in a real browser and posts a comment as the Secure‑SSO
user.
Potrzebujesz pomocy?
Jeśli napotkasz jakiekolwiek problemy lub masz pytania dotyczące pakietu Django, proszę:
Współpraca
Wkłady są mile widziane! Odwiedź repozytorium na GitHubie, aby zapoznać się z wytycznymi dotyczącymi wkładów.