
Мова 🇺🇦 Українська
Документація
Початок роботи
Використання
Довідка API
Додайте коментарі до вашого Django-додатку
Це офіційний пакет Django для FastComments.
Компоненти живих коментарів та чату з безпечним SSO за допомогою шаблонних тегів.
Репозиторій
Агенти кодування ШІ 
Надайте вашому агенту коду контекст FastComments, який йому потрібен — віджети, конфігурація, Secure SSO, REST API та SDK:
npx skills add fastcomments/skills
Працює з Claude Code, Codex, Cursor, Copilot, Gemini та будь‑яким іншим агентом, який підтримує skills CLI.
Вимоги 
- Python 3.10+
- Django 4.2, 5.0, 5.1, або 5.2
- Ідентифікатор орендаря FastComments (використайте
demo, щоб спробувати без облікового запису) - Секрет API потрібний лише для Secure SSO
Встановлення 
Встановіть з тегу випуску (цей проєкт розповсюджується через git‑теги, а не через PyPI):
pip install "git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
Для серверного доступу до REST (використовуючи допоміжні функції admin() / public_api()), додайте додатковий параметр api, який підключає згенерований клієнт SDK:
pip install "fastcomments-django[api] @ git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"
Додайте застосунок до INSTALLED_APPS:
INSTALLED_APPS = [
# ...
"fastcomments_django",
]
Швидкий старт 
Налаштуйте ваш тенант у settings.py:
import os
FASTCOMMENTS = {
"TENANT_ID": os.environ.get("FASTCOMMENTS_TENANT_ID", "demo"),
}
Вставте віджет у будь‑який шаблон:
{% load fastcomments %}
{% fastcomments url_id="my-page" %}
Вимоги для автоматичного SSO 
Щоб автоматично передати залогіненого користувача у віджет, теги читають поточного користувача з запиту. Переконайтеся, що ваш проект має обидва ці налаштування (вони увімкнені за замовчуванням у стандартному проекті Django):
django.template.context_processors.requestinTEMPLATES["OPTIONS"]["context_processors"]django.contrib.auth.middleware.AuthenticationMiddlewareinMIDDLEWARE
Якщо в контексті шаблону немає запиту, віджети відображаються для анонімного
відвідувача. Ви завжди можете передати користувача явно: {% fastcomments user=some_user %}.
Теги віджета 
Кожен віджет має свій власний тег. Усі вони приймають **extra аргументи‑ключові, які об’єднуються в конфігурацію віджета без змін (використовуйте camelCase ключі) для будь‑якого параметра, що не охоплений іменованими аргументами нижче.
| Тег | Віджет |
|---|---|
{% 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 |
Іменовані аргументи відповідають camelCase ключам конфігурації віджета:
| Аргумент | Ключ конфігурації | Теги |
|---|---|---|
url_id | urlId | comments, live chat, comment count, collab/image chat, recent comments, reviews summary |
url | url | comments, live chat, collab/image chat |
readonly | readonly | comments, live chat, collab/image chat |
locale | locale | comments, live chat, collab/image chat, user activity |
has_dark_background | hasDarkBackground | all |
default_sort_direction | defaultSortDirection | comments, live chat, collab/image chat |
number_only | numberOnly | comment count |
is_live | isLive | comment count |
count | count | recent comments, recent discussions |
target | (querySelector, not sent) | collab chat, image chat |
chat_square_percentage | chatSquarePercentage | image chat |
user_id | userId | user activity |
Приклади:
{% load fastcomments %}
{% fastcomments url_id="my-page" locale="en_us" default_sort_direction="MR" %}
{% fastcomments_live_chat url_id="room-1" %}
Коментарі: {% fastcomments_comment_count url_id="my-page" number_only=True %}
{# Collab chat приєднується до існуючого елемента на сторінці #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}
{# Bulk counts: розмістіть маркери, потім один bulk loader заповнює їх усі #}
{% 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 (єдиний вхід) 
Увімкніть SSO та оберіть режим у settings.py. Безпечний SSO підписує користувача
на стороні сервера за допомогою HMAC-SHA256 з використанням вашого API-секрету і є рекомендованим.
FASTCOMMENTS = {
"TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
"API_KEY": os.environ["FASTCOMMENTS_API_KEY"], # ваш API-секрет; підписує Secure SSO
"SSO": {
"ENABLED": True,
"MODE": "secure", # "secure" | "simple"
# Зіставте поля FastComments з вашою моделлю користувача. Значенням може бути
# ім'я атрибута, шлях через крапку ("profile.avatar_url"), callable(user) або 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, або шлях через крапку
"IS_MODERATOR": None,
"GROUP_IDS": None, # callable(user) -> list, або шлях через крапку
},
}
Обирайте SSO
idобдумано.idу FastComments — це постійний ідентифікатор історії коментарів користувача. ТиповийUSER_MAPзіставляє його з первинним ключем Django для зручності без налаштувань, але послідовні цілочисельні PK можна перебирати, і їх важко змінити пізніше (змінаidкористувача розділяє його історію на новий обліковий запис). Для чогось більшого, ніж демо, зіставтеidзі стабільним, непрозорим значенням, обраним заздалегідь (UUID або окремий публічний id), і ніколи не вкладайте в нього приватні дані. Приклад застосунку використовує id на основі імені користувача саме з цієї причини.
SSO автоматично впроваджується у {% fastcomments %}, {% fastcomments_live_chat %},
{% fastcomments_collab_chat %}, {% fastcomments_image_chat %} та
{% fastcomments_user_activity %} для поточного користувача.
URL-адреси входу/виходу, що показуються відвідувачам, які не увійшли, за замовчуванням — reverse("login") /
reverse("logout"); перевизначте їх через SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].
Користувацьке зіставлення
Два параметри з вищим пріоритетом мають перевагу над USER_MAP:
-
Метод у вашій моделі користувача (пітонічний аналог інтерфейсу):
class User(AbstractUser): def to_fastcomments_user_data(self): return {"id": self.pk, "email": self.email, "username": self.get_username()} -
Глобальний мапер, шлях через крапку до
callable(user) -> dict:FASTCOMMENTS = {"SSO": {"USER_MAPPER": "myapp.sso.map_user"}}
Пріоритет: USER_MAPPER > to_fastcomments_user_data() > USER_MAP.
Доступ до API на боці сервера 
З встановленим додатком [api], викликайте REST API FastComments через SDK, попередньо налаштований з вашим API‑ключем і регіоном:
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, щоб маршрутизувати віджети та API до ЄС:
FASTCOMMENTS = {"TENANT_ID": "...", "REGION": "eu"}
Налаштування вбудованої розмітки 
Перевизначте fastcomments/widget.html, розмістивши свою копію раніше у шляху пошуку шаблонів (проект templates/fastcomments/widget.html). Це аналог Django для Laravel vendor:publish --tag=fastcomments-views.
Довідка щодо налаштувань 
| Ключ | За замовчуванням | Опис |
|---|---|---|
TENANT_ID | "" | Ваш FastComments tenant ID (demo для тестування). |
API_KEY | "" | Ваш API secret. Підписує Secure SSO і автентифікує admin(). |
REGION | None | None для США, "eu" для регіону ЄС. |
SSO.ENABLED | False | Увімкнути SSO. |
SSO.MODE | "secure" | "secure" (HMAC) або "simple" (не підписаний). |
SSO.LOGIN_URL / SSO.LOGOUT_URL | None | Показується відвідувачам, які вийшли; за замовчуванням reverse("login"/"logout"). |
SSO.USER_MAP | id/email/username | Поле FastComments до атрибуту/шляху/виклику користувача. |
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDS | None | callable(user) або шлях через крапки. |
SSO.USER_MAPPER | None | Шлях через крапки до callable(user) -> dict; найвищий пріоритет. |
WIDGET_DEFAULTS | {} | Конфіг, який зливається у кожен віджет (ключі у camelCase). |
Приклад проекту 
Запусковий приклад знаходиться в example/: застосунок з лівою панеллю навігації та основною сценою, зі сторінкою для кожного віджета та сторінкою входу зі списком попередньо створених демо-користувачів.
Увійдіть як будь-хто з них, і віджети коментарів та живого чату автентифікують цю особу через Secure SSO. З цього каталогу:
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
Без API-секрету відбувається повернення до публічного орендаря demo (анонімний режим).
example/browser_smoke.py — це Playwright e2e-тест, який завантажує сторінку в реальному браузері та публікує коментар від імені користувача Secure SSO.
Потрібна допомога?
Якщо ви стикаєтеся з будь‑якими проблемами або маєте питання щодо пакета Django, будь ласка:
Внесок
Внески вітаються! Будь ласка, відвідайте GitHub репозиторій для отримання рекомендацій щодо внеску.