FastComments.com

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


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

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

מאגר

הצג ב‑GitHub


דרישות 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

Every widget has its own tag. All of them accept **extra keyword arguments,
which are merged into the widget config as‑is (use camelCase keys) for anything
not covered by the named arguments below.

תגוידג'ט
{% 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="..." %}פיד פעילות של משתמש

Named arguments map to the widget's camelCase config keys:

ארגומנטמפתח תצורהתגיות
url_idurlIdcomments, live chat, comment count, collab/image chat, recent comments, reviews summary
urlurlcomments, live chat, collab/image chat
readonlyreadonlycomments, live chat, collab/image chat
localelocalecomments, live chat, collab/image chat, user activity
has_dark_backgroundhasDarkBackgroundall
default_sort_directiondefaultSortDirectioncomments, live chat, collab/image chat
number_onlynumberOnlycomment count
is_liveisLivecomment count
countcountrecent comments, recent discussions
target(querySelector, not sent)collab chat, image chat
chat_square_percentagechatSquarePercentageimage chat
user_iduserIduser 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 מצורף לאלמנט קיים בדף #}
<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 (כניסה יחידה) 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


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 לקבלת הנחיות תרומה.