FastComments.com

Django Uygulamanıza Yorumlar Ekleyin


Bu, FastComments için resmi Django Paketi.

Şablon etiketleri aracılığıyla Güvenli SSO ile canlı yorumlama ve sohbet bileşenleri.

Depo

GitHub'da Görüntüle


Gereksinimler Internal Link


  • Python 3.10+
  • Django 4.2, 5.0, 5.1, veya 5.2
  • Bir FastComments kiracı kimliği (hesapsız deneme yapmak için demo kullanın)
  • Bir API gizli anahtarı yalnızca Secure SSO için gereklidir

Kurulum Internal Link


Bir sürüm etiketinden kurun (bu proje PyPI yerine git etiketleriyle dağıtılır):

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

Sunucu tarafı REST erişimi için (admin() / public_api() yardımcıları), SDK'nın oluşturduğu istemciyi çeken api ekini ekleyin:

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

INSTALLED_APPS içine uygulamayı ekleyin:

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

Hızlı Başlangıç Internal Link

Configure your tenant in settings.py:

import os

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

Drop the widget into any template:

{% load fastcomments %}

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

Otomatik SSO için Önkoşullar Internal Link


Oturum açmış kullanıcının widget'a otomatik olarak aktarılması için, etiketler mevcut kullanıcıyı isteği üzerinden okur. Projenizin aşağıdakilere sahip olduğundan emin olun (standart bir Django projesinde varsayılan olarak etkindir):

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

Şablon bağlamında bir request olmadığında, widget'lar anonim bir ziyaretçi için render edilir. Her zaman bir kullanıcıyı açıkça geçirebilirsiniz: {% fastcomments user=some_user %}.

Widget etiketleri Internal Link

Her widget'in kendi etiketi vardır. Hepsi **extra anahtar kelime argümanlarını kabul eder, bunlar widget yapılandırmasına olduğu gibi birleştirilir (camelCase anahtarlarını kullanın) aşağıdaki adlandırılmış argümanlar tarafından kapsanmayan her şey için.

TagWidget
{% fastcomments %}Yorumlar
{% fastcomments_live_chat %}Canlı sohbet
{% fastcomments_comment_count %}Yorum sayısı rozeti
{% fastcomments_comment_count_bulk %} + {% fastcomments_count_marker %}Toplu yorum sayıları
{% fastcomments_collab_chat target="#el" %}İşbirlikçi (satır içi) sohbet
{% fastcomments_image_chat target="#el" %}Görsel açıklama sohbeti
{% fastcomments_recent_comments %}Son yorumlar
{% fastcomments_recent_discussions %}Son tartışmalar
{% fastcomments_reviews_summary %}İnceleme özeti
{% fastcomments_top_pages %}En çok tartışılan sayfalar
{% fastcomments_user_activity user_id="..." %}Bir kullanıcının etkinlik akışı

Adlandırılmış argümanlar widget'ın camelCase yapılandırma anahtarlarına eşlenir:

ArgümanYapılandırma anahtarıEtiketler
url_idurlIdyorumlar, canlı sohbet, yorum sayısı, işbirlikçi/görsel sohbet, son yorumlar, inceleme özeti
urlurlyorumlar, canlı sohbet, işbirlikçi/görsel sohbet
readonlyreadonlyyorumlar, canlı sohbet, işbirlikçi/görsel sohbet
localelocaleyorumlar, canlı sohbet, işbirlikçi/görsel sohbet, kullanıcı etkinliği
has_dark_backgroundhasDarkBackgroundtümü
default_sort_directiondefaultSortDirectionyorumlar, canlı sohbet, işbirlikçi/görsel sohbet
number_onlynumberOnlyyorum sayısı
is_liveisLiveyorum sayısı
countcountson yorumlar, son tartışmalar
target(querySelector, gönderilmez)işbirlikçi sohbet, görsel sohbet
chat_square_percentagechatSquarePercentagegörsel sohbet
user_iduserIdkullanıcı etkinliği

Örnekler:

{% 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 %}

{# İşbirlikli sohbet sayfada mevcut bir öğeye eklenir #}
<article id="post-body">...</article>
{% fastcomments_collab_chat target="#post-body" %}

{# Toplu sayımlar: işaretleyicileri yerleştirin, ardından tek bir toplu yükleyici hepsini doldurur #}
{% 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 (Tek Oturum Açma) Internal Link

SSO'yu etkinleştirin ve settings.py içinde bir mod seçin. Secure SSO, API gizli anahtarınızı kullanarak HMAC‑SHA256 ile kullanıcıyı sunucu tarafında imzalar ve önerilir.

FASTCOMMENTS = {
    "TENANT_ID": os.environ["FASTCOMMENTS_TENANT_ID"],
    "API_KEY": os.environ["FASTCOMMENTS_API_KEY"],   # your API secret; signs Secure SSO
    "SSO": {
        "ENABLED": True,
        "MODE": "secure",                            # "secure" | "simple"
        # Map FastComments fields to your user model. Values may be an attribute
        # name, a dotted path ("profile.avatar_url"), a callable(user), or 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, or dotted path
        "IS_MODERATOR": None,
        "GROUP_IDS": None,                           # callable(user) -> list, or dotted path
    },
}

SSO id'yi kasıtlı olarak seçin. FastComments idsi, bir kullanıcının yorum geçmişi için kalıcı bir tanımlayıcıdır. Varsayılan USER_MAP, sıfır yapılandırma kolaylığı için bunu Django birincil anahtarınıza eşler, ancak sıralı tamsayı PK'ları sayılabilir ve daha sonra değiştirilmesi zordur (bir kullanıcının idsi değiştirildiğinde geçmişi yeni bir hesaba bölünür). Bir demo dışındaki her şey için idyi önceden seçilmiş, stabil, opak bir değere (örneğin bir UUID veya özel bir genel kimlik) eşleyin ve içine asla özel veri koymayın. Örnek uygulama bu sebeple kullanıcı adı tabanlı bir id kullanır.

SSO, mevcut kullanıcı için {% fastcomments %}, {% fastcomments_live_chat %}, {% fastcomments_collab_chat %}, {% fastcomments_image_chat %} ve {% fastcomments_user_activity %} içine otomatik olarak enjekte edilir.

Oturum açma/kapama URL'leri, oturum açmamış ziyaretçilere varsayılan olarak reverse("login") / reverse("logout") olarak gösterilir; bunları SSO["LOGIN_URL"] / SSO["LOGOUT_URL"] ile geçersiz kılabilirsiniz.

Özel eşleme

USER_MAP'i geçersiz kılan iki daha yüksek öncelikli seçenek vardır:

  • Kullanıcı modelinizde bir yöntem (bir arayüzün Pythonik benzeri):

    class User(AbstractUser):
        def to_fastcomments_user_data(self):
            return {"id": self.pk, "email": self.email, "username": self.get_username()}
  • Küresel eşleyici, callable(user) -> dict tipinde bir noktalı yol:

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

Öncelik sırası USER_MAPPER > to_fastcomments_user_data() > USER_MAP.

Sunucu tarafı API erişimi Internal Link

With the [api] extra installed, call the FastComments REST API through the SDK, pre-configured with your API key and region:

from fastcomments_django import admin, public_api, get_manager

admin().get_comments("YOUR_TENANT_ID", ...)     # kimlik doğrulandı (DefaultApi)
public_api().get_comments_public(...)            # herkese açık (PublicApi)

# API çağrıları veya istemci devri için bir SSO token'ı oluşturun:
token = get_manager().sso().token_for(request.user)

AB bölgesi Internal Link


REGION'u ayarlayarak widget'ları ve API'yi AB'ye yönlendirin:

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

Gömülü işaretlemenin özelleştirilmesi Internal Link

Fastcomments/widget.html dosyasını, kendi kopyanızı daha önce
şablon arama yolunda (bir proje templates/fastcomments/widget.html). Bu
Django analogu Laravel'in vendor:publish --tag=fastcomments-views'dır.

Ayarlar referansı Internal Link

AnahtarVarsayılanAçıklama
TENANT_ID""FastComments kiracı kimliğiniz (demo test için).
API_KEY""API gizli anahtarınız. Güvenli SSO'yu imzalar ve admin()'ı kimlik doğrular.
REGIONNoneABD için None, AB bölgesi için "eu".
SSO.ENABLEDFalseSSO'yu aç.
SSO.MODE"secure""secure" (HMAC) veya "simple" (imzasız).
SSO.LOGIN_URL / SSO.LOGOUT_URLNoneOturumu kapatmış ziyaretçilere gösterilir; varsayılan reverse("login"/"logout").
SSO.USER_MAPid/email/usernameFastComments alanı, kullanıcı özniteliği/yolu/çağrılabilir fonksiyona.
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDSNonecallable(user) veya noktalı yol.
SSO.USER_MAPPERNonecallable(user) -> dict için noktalı yol; en yüksek öncelik.
WIDGET_DEFAULTS{}Her widget içine birleştirilen yapılandırma (camelCase anahtarlar).

Örnek proje Internal Link

A runnable showcase lives in example/: bir sol-kenar + ana-sahne uygulaması; her widget için bir sayfa ve önceden doldurulmuş demo kullanıcılarını listeleyen bir giriş sayfası.

Bunlardan herhangi biriyle oturum açın ve yorum ve canlı‑chat widget’ları bu kimliği Secure SSO aracılığıyla doğrular.

Bu dizinden:

python manage.py migrate
# Secure SSO'yu eylemde görmek için kendi kiracınızı kullanın (bir API gizli anahtarı bunu etkinleştirir):
FASTCOMMENTS_TENANT_ID=... FASTCOMMENTS_API_KEY=... python manage.py runserver

Bir API gizli anahtarı olmadan, genel demo kiracısına geri döner (anonim).

example/browser_smoke.py bir Playwright e2e’dir; gerçek bir tarayıcıda sayfayı yükler ve Secure‑SSO kullanıcısı olarak bir yorum gönderir.

Yardıma mı ihtiyacınız var?

Django Paketi ile ilgili herhangi bir sorunla karşılaşırsanız veya sorularınız varsa, lütfen:

Katkıda Bulunma

Katkılar memnuniyetle karşılanır! Katkı yönergeleri için lütfen GitHub deposunu ziyaret edin.