FastComments.com

Dodajte komentare u vašu Django aplikaciju

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

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

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

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

AI agenti za kodiranje Internal Link

skills.sh

Дајте вашем кодујућем агенту FastComments контекст који му је потребан - виџете, конфигурацију, Secure SSO, REST API и SDK‑ове:

npx skills add fastcomments/skills

Ради са Claude Code, Codex, Cursor, Copilot, Gemini и свим осталим агентима које подржава skills CLI.

Zahtevi Internal Link

  • Python 3.10+
  • Django 4.2, 5.0, 5.1, or 5.2
  • FastComments tenant ID (koristite demo da ga isprobate без налога)
  • API secret је потребан само за Secure SSO

Instalacija Internal Link

Инсталирајте из ознаке издања (ов пројекат се дистрибуира преко 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",
]

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

Да бисте аутоматски прослали пријављеног корисника у виџет, ознаке читају тренутног корисника из захтева. Уверите се да ваш пројекат има оба ова (они су подразумевано укључени у стандардном Django пројекту):

  • django.template.context_processors.request у TEMPLATES["OPTIONS"]["context_processors"]
  • django.contrib.auth.middleware.AuthenticationMiddleware у MIDDLEWARE

Без захтева у контексту шаблона, виџети се приказују за анонимног посетилаца. Увек можете експлицитно проследити корисника: {% fastcomments user=some_user %}.

Oznake vidžeta Internal Link

Сваки виџет има своју ознаку. Сви они прихватају **extra кључне аргументе, који се спајају у конфигурацију виџета без измена (користите camelCase кључеве) за све што није обухваћено именованим аргументима испод.

TagWidget
{% fastcomments %}Коментари
{% fastcomments_live_chat %}Уживо ћаскање
{% fastcomments_comment_count %}Ознака броја коментара
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %}Масовни број коментара
{% fastcomments_collab_chat target="#el" %}Колаборативно (уграђено) ћаскање
{% fastcomments_image_chat target="#el" %}ћаскање за анотацију слика
{% fastcomments_recent_comments %}Скорашњи коментари
{% fastcomments_recent_discussions %}Скорашње дискусије
{% fastcomments_reviews_summary %}Сажетак рецензија
{% fastcomments_top_pages %}Најдискусијније странице
{% fastcomments_user_activity user_id="..." %}Фид активности корисника

Именовани аргументи мапирају се на camelCase кључеве конфигурације виџета:

ArgumentConfig keyTags
url_idurlIdкоментари, уживо ћаскање, број коментара, колаб/слика ћаскање, скорашњи коментари, сажетак рецензија
urlurlкоментари, уживо ћаскање, колаб/слика ћаскање
readonlyreadonlyкоментари, уживо ћаскање, колаб/слика ћаскање
localelocaleкоментари, уживо ћаскање, колаб/слика ћаскање, активност корисника
has_dark_backgroundhasDarkBackgroundсви
default_sort_directiondefaultSortDirectionкоментари, уживо ћаскање, колаб/слика ћаскање
number_onlynumberOnlyброј коментара
is_liveisLiveброј коментара
countcountскорашњи коментари, скорашње дискусије
target(querySelector, not sent)колаб ћаскање, слика ћаскање
chat_square_percentagechatSquarePercentageслика ћаскање
user_iduserIdактивност корисника

Examples:

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

{# Колаб ћаскање се прикаче на постојећи елемент на страници #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}

{# Масовни бројеви: поставите маркере, затим један масовни учитавач их све попуњава #}
{% 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

Омогућите SSO и изаберите режим у settings.py. Secure 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. FastComments id је трајни идентификатор историје коментара корисника. Подразумевани 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.

Pristup API-ju na serveru 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

Подесите REGION да усмерите виџете и API у ЕУ:

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

Prilagođavanje embed koda Internal Link

Замените fastcomments/widget.html тако што ћете ставити сопствену копију раније у путању за претрагу шаблона (у пројекту templates/fastcomments/widget.html). Ово је Django аналог Laravel-овог vendor:publish --tag=fastcomments-views.

Referenca podešavanja Internal Link

КључПодразумеваноОпис
TENANT_ID""Ваш FastComments tenant ID (demo за тестирање).
API_KEY""Ваш API тајн. Потписује Secure SSO и аутентификује admin().
REGIONNoneNone за САД, "eu" за EU регион.
SSO.ENABLEDFalseУкључите SSO.
SSO.MODE"secure""secure" (HMAC) или "simple" (непотписано).
SSO.LOGIN_URL / SSO.LOGOUT_URLNoneПриказује се одјављеним посетиоцима; подразумевано је reverse("login"/"logout").
SSO.USER_MAPid/email/usernameFastComments поље у атрибут/пут/функцију корисника.
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDSNonecallable(user) или путања са тачкама.
SSO.USER_MAPPERNoneПутања са тачкама до callable(user) -> dict; највиши приоритет.
WIDGET_DEFAULTS{}Конфигурација спојена у сваки виџет (camelCase кључеви).

Primer projekta Internal Link

Покретљив приказ се налази у 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 tenant (анонимно). example/browser_smoke.py је Playwright e2e који учитава страницу у правом прегледачу и објављује коментар као Secure-SSO корисник.

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

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

Допринесите

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