
שפה 🇮🇱 עברית
תיעוד
התחלה
שימוש
מדריך API
הוספת תגובות לאפליקציית Django שלך
זהו חבילת Django הרשמית ל-FastComments.
רכיבי תגובות ושיחות בזמן אמת עם SSO מאובטח דרך תיוגי תבנית.
מאגר
דרישות 
- Python 3.10+
- Django 4.2, 5.0, 5.1, or 5.2
- FastComments tenant ID (השתמש ב-
demoכדי לנסות זאת ללא חשבון) - נדרש סוד API רק עבור Secure SSO
התקנה 
התקן משורת שחרור (פרויקט זה מופץ באמצעות תגיות 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",
]
התחלה מהירה 
הגדר את השוכר שלך ב-settings.py:
import os
FASTCOMMENTS = {
"TENANT_ID": os.environ.get("FASTCOMMENTS_TENANT_ID", "demo"),
}
הוסף את הווידג'ט לכל תבנית:
{% 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 %}.
תגי וידג'ט 
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_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 מצורף לאלמנט קיים בדף #}
<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 (כניסה יחידה) 
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 בצד השרת 
עם ההרחבה [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)
אזור האיחוד האירופי 
הגדר את REGION כדי לנתב את הווידג׳טים וה‑API לאיחוד האירופי:
FASTCOMMENTS = {"TENANT_ID": "...", "REGION": "eu"}
התאמת קוד ההטמעה 
החלף את fastcomments/widget.html על‑ידי מיקום העותק שלך מוקדם יותר בנתיב החיפוש של
תבניות (פרויקט templates/fastcomments/widget.html). זהו
האנלוג של Django ל‑Laravel vendor:publish --tag=fastcomments-views.
מדריך ההגדרות 
| Key | Default | Description |
|---|---|---|
TENANT_ID | "" | מזהה השוכר של FastComments שלך (demo לבדיקה). |
API_KEY | "" | סוד ה-API שלך. חותם על 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 לקבלת הנחיות תרומה.