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 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

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,      # позив (user) -> bool, или путања са тачкама
        "IS_MODERATOR": None,
        "GROUP_IDS": None,                           # позив (user) -> list, или путања са тачкама
    },
}

Изаберите SSO id свесно. FastComments id је трајни идентификатор за историју коментара корисника. Подразумевани USER_MAP мапира га на ваш Django примарни кључ за зручност без подешавања, али секвентни целобројни PK‑ови су набројиви и тешко их је касније променити (промена id корисника дели њихову историју у нови налог). За све осим демо примера, мапирајте id на стабилну, непрозирну вредност изабрану унапред (UUID или посебан јавни id), и никада не стављајте приватне податке у њега. Пример апликације користи 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:

  • Метод на вашем корисничком моделу (the Pythonic analog of an interface):

    class User(AbstractUser):
        def to_fastcomments_user_data(self):
            return {"id": self.pk, "email": self.email, "username": self.get_username()}
  • Глобални мапер, a dotted path to callable(user) -> dict:

    FASTCOMMENTS = {"SSO": {"USER_MAPPER": "myapp.sso.map_user"}}

Precedence is 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


Подесите 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

A runnable showcase lives in example/: a left-rail + main-stage app with a page per widget and a страница за пријаву која приказује унапред унете демо кориснике. 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 репозиторијум за смернице о доприносу.