FastComments.com

הוספת תגובות לאפליקציית Django שלך

זהו חבילת Django הרשמית ל-FastComments.

רכיבי תגובות ושיחות בזמן אמת עם SSO מאובטח דרך תיוגי תבנית.

מאגר

הצג ב‑GitHub

סוכני קידוד AI Internal Link

skills.sh

תן לסוכן הקידוד שלך את ההקשר של FastComments שהוא צריך – וידג׳טים, תצורה, Secure SSO, ה‑REST API וה‑SDKs:

npx skills add fastcomments/skills

עובד עם Claude Code, Codex, Cursor, Copilot, Gemini, וכל סוכן אחר שה‑skills CLI תומך בו.

דרישות Internal Link

  • Python 3.10+
  • Django 4.2, 5.0, 5.1, or 5.2
  • FastComments tenant ID (השתמש ב-demo כדי לנסות זאת ללא חשבון)
  • נדרש סוד API רק עבור Secure SSO

התקנה Internal Link

התקן משורת שחרור (פרויקט זה מופץ באמצעות תגיות git, ולא דרך PyPI):

pip install "git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"

לגישה ל‑REST בצד השרת (העוזרים admin() / public_api()), הוסף את ה‑api הנוסף, שמביא את ה‑client שנוצר על‑ידי ה‑SDK:

pip install "fastcomments-django[api] @ git+https://github.com/fastcomments/fastcomments-django.git@v0.1.0"

הוסף את האפליקציה ל‑INSTALLED_APPS:

INSTALLED_APPS = [
    # ...
    "fastcomments_django",
]

התחלה מהירה Internal Link

הגדר את השוכר שלך ב-settings.py:

import os

FASTCOMMENTS = {
    "TENANT_ID": os.environ.get("FASTCOMMENTS_TENANT_ID", "demo"),
}

הוסף את הווידג'ט לכל תבנית:

{% load fastcomments %}

{% fastcomments url_id="my-page" %}

דרישות מוקדמות ל-SSO אוטומטי Internal Link

כדי להעביר את המשתמש המחובר לוידג׳ט באופן אוטומטי, התגים קוראים את המשתמש הנוכחי מהבקשה. ודא שהפרויקט שלך כולל את שני הדברים האלה (הם מופעלים כברירת מחדל בפרויקט Django סטנדרטי):

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

בלי בקשה בקונטקסט של התבנית, הווידג׳טים מוצגים למבקר אנונימי. תמיד אפשר להעביר משתמש במפורש: {% fastcomments user=some_user %}.

תגיות וידג'ט Internal Link

לכל ווידג'ט יש תג משלו. כולם מקבלים ארגומנטים של מילות מפתח **extra, אשר ממוזגים לתצורת הווידג'ט כפי שהם (השתמשו במפתחות camelCase) עבור כל דבר שאינו מכוסה על ידי הארגומנטים המכוננים למטה.

תגווידג'ט
{% 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 של הווידג'ט:

ארגומנטמפתח תצורהתגים
url_idurlIdתגובות, צ'אט חי, ספירת תגובות, צ'אט שיתופי/תמונות, תגובות אחרונות, סיכום ביקורות
urlurlתגובות, צ'אט חי, צ'אט שיתופי/תמונות
readonlyreadonlyתגובות, צ'אט חי, צ'אט שיתופי/תמונות
localelocaleתגובות, צ'אט חי, צ'אט שיתופי/תמונות, פעילות משתמש
has_dark_backgroundhasDarkBackgroundהכול
default_sort_directiondefaultSortDirectionתגובות, צ'אט חי, צ'אט שיתופי/תמונות
number_onlynumberOnlyספירת תגובות
is_liveisLiveספירת תגובות
countcountתגובות אחרונות, דיונים אחרונים
target(querySelector, לא נשלח)צ'אט שיתופי, צ'אט תמונות
chat_square_percentagechatSquarePercentageצ'אט תמונות
user_iduserIdפעילות משתמש

דוגמאות:

{% 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 (כניסה יחידה) Internal Link

Enable 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 למודל המשתמש שלכם. ערכים יכולים להיות attribute
        # name, נתיב מנוקד ("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, או נתיב מנוקד
    },
}

בחרו בכוונה את id של SSO. ה‑id של FastComments הוא המזהה הקבוע
עבור היסטוריית ההערות של משתמש. ה‑USER_MAP ברירת המחדל ממפה אותו למפתח הראשי של Django שלכם לנוחות ללא קונפיגורציה, אך מפתחות שלמים רצופים ניתנים לה‑enumeration וקשה לשנותם מאוחר יותר (שינוי id של משתמש מפצל את ההיסטוריה שלו לחשבון חדש). עבור כל דבר מעבר לדוגמה, מפתו id לערך יציב ולא שקוף שנבחר מראש (UUID או מזהה ציבורי ייעודי), ולעולם אל תכניסו אליו נתונים פרטיים. האפליקציה לדוגמה משתמשת ב‑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 בצד השרת Internal Link

עם ההרחבה [api] מותקנת, קראו ל‑REST API של FastComments דרך ה‑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)

אזור האיחוד האירופי Internal Link

הגדר את REGION כדי לנתב את הווידג׳טים וה‑API לאיחוד האירופי:

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

התאמת קוד ההטמעה Internal Link

החלף את fastcomments/widget.html על‑ידי מיקום העותק שלך מוקדם יותר בנתיב החיפוש של תבניות (פרויקט templates/fastcomments/widget.html). זהו האנלוג של Django ל‑Laravel vendor:publish --tag=fastcomments-views.

תיעוד הגדרות Internal Link

KeyDefaultDescription
TENANT_ID""מזהה השוכר של FastComments שלך (demo לבדיקה).
API_KEY""סוד ה-API שלך. חותם על SSO מאובטח ומאמת admin().
REGIONNoneNone עבור ארה"ב, "eu" עבור אזור האיחוד האירופי.
SSO.ENABLEDFalseהפעל את SSO.
SSO.MODE"secure""secure" (HMAC) או "simple" (לא חתום).
SSO.LOGIN_URL / SSO.LOGOUT_URLNoneמוצג למבקרים שלא מחוברים; ברירת המחדל היא reverse("login"/"logout").
SSO.USER_MAPid/email/usernameשדה FastComments למאפיין/נתיב/קריאה של משתמש.
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDSNonecallable(user) או נתיב מנוקד.
SSO.USER_MAPPERNoneנתיב מנוקד ל-callable(user) -> dict; העדיפות הגבוהה ביותר.
WIDGET_DEFAULTS{}תצורה הממוזגת לכל וידג'ט (מפתחי camelCase).

פרויקט לדוגמה 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 (אנונימי).
example/browser_smoke.py הוא מבחן קצה-לקצה (e2e) של Playwright שטוען את הדף בדפדפן אמיתי ומפרסם תגובה כמשתמש Secure-SSO.

זקוקים לעזרה?

אם אתם נתקלים בבעיות או יש לכם שאלות לגבי חבילת Django, אנא:

תרומה

תרומות מוזמנות! אנא בקרו במאגר GitHub לקבלת הנחיות תרומה.