
Език 🇧🇬 Български
Документация
Започване
Употреба
API справка
Добавете коментари към вашето Django приложение
Това е официалният Django пакет за FastComments.
Компоненти за живи коментари и чат със сигурен SSO чрез шаблонни тагове.
Хранилище
Изисквания 
- Python 3.10+
- Django 4.2, 5.0, 5.1, or 5.2
- FastComments tenant ID (използвайте
demo, за да го изпробвате без акаунт) - API secret е необходим само за Secure SSO
Инсталиране 
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",
]
Бърз старт 
Configure your tenant in settings.py:
import os
FASTCOMMENTS = {
"TENANT_ID": os.environ.get("FASTCOMMENTS_TENANT_ID", "demo"),
}
Drop the widget into any template:
{% 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" %}
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 (Единно влизане) 
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"], # вашият 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умишлено. FastCommentsidе постоянен
идентификатор за историята на коментарите на потребителя. По подразбиранеUSER_MAPго съпоставя с вашия
Django primary key за удобство без конфигурация, но последователните целочислени PK‑ове са
изброими и трудно се променят по-късно (промяната наidна потребител разделя тяхната
история в нов акаунт). За всичко, което надхвърля демонстрация, съпоставетеidсъс стабилна,
непрозрачна стойност, избрана предварително (UUID или отделен публичен идентификатор), и никога не поставяйте
лични данни в него. Примерното приложение използваid, базиран на потребителско име, по тази причина.
SSO is injected automatically into {% fastcomments %}, {% fastcomments_live_chat %}, {% fastcomments_collab_chat %}, {% fastcomments_image_chat %}, and {% fastcomments_user_activity %} for the current user.
Login/logout URLs shown to signed-out visitors default to reverse("login") / reverse("logout"); override them with SSO["LOGIN_URL"] / SSO["LOGOUT_URL"].
Персонализирано съпоставяне
Two higher-precedence options beat 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"}}
Precedence is USER_MAPPER > to_fastcomments_user_data() > USER_MAP.
Достъп до API от сървъра 
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", ...) # аутентифицирано (DefaultApi)
public_api().get_comments_public(...) # публично (PublicApi)
# Генерирайте SSO токен за API заявки или предаване към клиент:
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). |
Примерен проект 
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.
Нуждаете се от помощ?
Ако срещнете проблеми или имате въпроси относно Django пакета, моля:
Принос
Приносите са добре дошли! Моля, посетете GitHub repository за насоки за принос.