FastComments.com

अपने Django ऐप में टिप्पणियाँ जोड़ें

यह FastComments का आधिकारिक Django पैकेज है।

टेम्पलेट टैग्स के माध्यम से सुरक्षित 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, या 5.2
  • एक FastComments tenant ID (बिना खाते के आज़माने के लिए demo का उपयोग करें)
  • API secret केवल Secure SSO के लिए आवश्यक है

इंस्टॉलेशन 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",
]

क्विकस्टार्ट 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 प्रोजेक्ट में डिफ़ॉल्ट रूप से चालू रहते हैं):

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

टेम्पलेट कॉन्टेक्स्ट में रिक्वेस्ट न होने पर, विजेट एक अनाम (anonymous) विज़िटर के लिए रेंडर होते हैं। आप हमेशा उपयोगकर्ता को स्पष्ट रूप से पास कर सकते हैं: {% fastcomments user=some_user %}।

विजेट टैग Internal Link

हर विजेट का अपना टैग होता है। इन सभी में **extra कीवर्ड आर्ग्युमेंट्स स्वीकार किए जाते हैं, जो विजेट कॉन्फ़िग में जैसे हैं वैसे मर्ज कर दिए जाते हैं (camelCase कुंजियों का उपयोग करें) — नीचे दिए गए नामित आर्ग्युमेंट्स से जो कुछ भी कवर नहीं है उसके लिए।

टैगविजेट
{% fastcomments %}टिप्पणियाँ (Comments)
{% 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_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_backgroundhasDarkBackgroundसभी
default_sort_directiondefaultSortDirectioncomments, live chat, collab/image chat
number_onlynumberOnlycomment count
is_liveisLivecomment count
countcountrecent comments, recent discussions
target(querySelector, भेजा नहीं जाता)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

settings.py में SSO सक्षम करें और एक मोड चुनें। Secure SSO आपके API secret का उपयोग करके HMAC-SHA256 के साथ यूज़र को सर्वर-साइड पर साइन करता है और यही अनुशंसित है।

FASTCOMMENTS = {
    "TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
    "API_KEY": os.environ["FASTCOMMENTS_API_KEY"],   # आपका API secret; Secure SSO साइन करता है
    "SSO": {
        "ENABLED": True,
        "MODE": "secure",                            # "secure" | "simple"
        # FastComments फ़ील्ड्स को अपने यूज़र मॉडल से मैप करें। मान एक attribute
        # नाम, एक dotted path ("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, या dotted path
        "IS_MODERATOR": None,
        "GROUP_IDS": None,                           # callable(user) -> list, या dotted path
    },
}

SSO id को सोच-समझकर चुनें। FastComments id यूज़र के कमेंट हिस्ट्री का स्थायी हैंडल है। डिफ़ॉल्ट USER_MAP इसे zero-config सुविधा के लिए आपकी Django primary key से मैप करता है, लेकिन क्रमागत integer PKs enumerable होते हैं और बाद में बदलना कठिन है (यूज़र का id बदलने से उनका हिस्ट्री एक नए अकाउंट में बंट जाता है)। डेमो से आगे किसी भी चीज़ के लिए, id को पहले से चुने गए एक स्थिर, अपारदर्शी मान (एक UUID या एक समर्पित public id) से मैप करें, और उसमें कभी निजी डेटा न रखें। उदाहरण ऐप इसी कारण से username-आधारित id का उपयोग करता है।

SSO वर्तमान यूज़र के लिए {% fastcomments %}, {% fastcomments_live_chat %}, {% fastcomments_collab_chat %}, {% fastcomments_image_chat %}, और {% fastcomments_user_activity %} में स्वचालित रूप से इंजेक्ट हो जाता है।

साइन-आउट विज़िटर्स को दिखाए जाने वाले login/logout URLs डिफ़ॉल्ट रूप से reverse("login") / reverse("logout") होते हैं; इन्हें SSO["LOGIN_URL"] / SSO["LOGOUT_URL"] से ओवरराइड करें।

कस्टम मैपिंग

दो उच्च-प्राथमिकता विकल्प USER_MAP को मात देते हैं:

  • आपके यूज़र मॉडल पर एक मेथड (एक इंटरफ़ेस का Pythonic एनालॉग):

    class User(AbstractUser):
        def to_fastcomments_user_data(self):
            return {"id": self.pk, "email": self.email, "username": self.get_username()}
  • एक ग्लोबल मैपर, callable(user) -> dict का एक dotted path:

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

प्राथमिकता क्रम है USER_MAPPER > to_fastcomments_user_data() > USER_MAP।

सर्वर-साइड API एक्सेस Internal Link

[api] एक्स्ट्रा इंस्टॉल होने पर, FastComments REST API को SDK के माध्यम से कॉल करें, जो आपकी API key और region के साथ पहले से कॉन्फ़िगर है:

from fastcomments_django import admin, public_api, get_manager

admin().get_comments("YOUR_TENANT_ID", ...)     # authenticated (DefaultApi)
public_api().get_comments_public(...)            # public (PublicApi)

# API कॉल या क्लाइंट हैंड-ऑफ़ के लिए SSO टोकन जनरेट करें:
token = get_manager().sso().token_for(request.user)

EU क्षेत्र Internal Link

EU के लिए विजेट और API को रूट करने के लिए REGION सेट करें:

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

एम्बेड मार्कअप को अनुकूलित करना Internal Link

टेम्पलेट सर्च पाथ पर अपनी खुद की कॉपी पहले रखकर fastcomments/widget.html को ओवरराइड करें (प्रोजेक्ट का templates/fastcomments/widget.html)। यह Laravel के vendor:publish --tag=fastcomments-views का Django समतुल्य है।

सेटिंग्स संदर्भ Internal Link

कुंजीडिफ़ॉल्टविवरण
TENANT_ID""आपकी FastComments टेनेंट आईडी (परीक्षण के लिए demo)।
API_KEY""आपका API सीक्रेट। Secure SSO पर हस्ताक्षर करता है और admin() को प्रमाणित करता है।
REGIONNoneUS के लिए None, EU क्षेत्र के लिए "eu"।
SSO.ENABLEDFalseSSO चालू करें।
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_MAPPERNonecallable(user) -> dict का डॉटेड पाथ; सर्वोच्च प्राथमिकता।
WIDGET_DEFAULTS{}हर विजेट में मर्ज किया जाने वाला कॉन्फ़िग (camelCase कुंजियाँ)।

उदाहरण प्रोजेक्ट Internal Link

example/ में एक चलाने योग्य डेमो मौजूद है: एक left-rail + main-stage ऐप, जिसमें प्रत्येक विजेट के लिए एक पेज और पहले से तैयार डेमो यूज़र्स की सूची दिखाने वाला साइन-इन पेज है। इनमें से किसी भी यूज़र के रूप में साइन इन करें और कमेंट तथा live-chat विजेट Secure SSO के माध्यम से उस पहचान को प्रमाणित कर लेते हैं। उस डायरेक्टरी से:

python manage.py migrate
# Secure SSO को एक्शन में देखने के लिए अपना tenant इस्तेमाल करें (इसके लिए एक API secret चाहिए):
FASTCOMMENTS_TENANT_ID=... FASTCOMMENTS_API_KEY=... python manage.py runserver

API secret न होने पर यह सार्वजनिक demo tenant (anonymous) पर वापस आ जाता है। example/browser_smoke.py एक Playwright e2e है जो असली ब्राउज़र में पेज लोड करता है और Secure-SSO यूज़र के रूप में एक कमेंट पोस्ट करता है।

सहायता चाहिए?

यदि आपको Django Package के बारे में कोई समस्या आती है या कोई प्रश्न है, तो कृपया:

योगदान देना

योगदान का स्वागत है! कृपया योगदान दिशानिर्देशों के लिए GitHub रिपॉजिटरी देखें।