
Dil 🇹🇷 Türkçe
Dokümantasyon
Başlarken
Kullanım
API Referansı
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
Gereksinimler 
- Python 3.10+
- Django 4.2, 5.0, 5.1, veya 5.2
- Bir FastComments kiracı kimliği (hesapsız deneme yapmak için
demokullanın) - Bir API gizli anahtarı yalnızca Secure SSO için gereklidir
Kurulum 
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ıç 
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 
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.requestinTEMPLATES["OPTIONS"]["context_processors"]django.contrib.auth.middleware.AuthenticationMiddlewareinMIDDLEWARE
Ş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 
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.
| Tag | Widget |
|---|---|
{% 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üman | Yapılandırma anahtarı | Etiketler |
|---|---|---|
url_id | urlId | yorumlar, canlı sohbet, yorum sayısı, işbirlikçi/görsel sohbet, son yorumlar, inceleme özeti |
url | url | yorumlar, canlı sohbet, işbirlikçi/görsel sohbet |
readonly | readonly | yorumlar, canlı sohbet, işbirlikçi/görsel sohbet |
locale | locale | yorumlar, canlı sohbet, işbirlikçi/görsel sohbet, kullanıcı etkinliği |
has_dark_background | hasDarkBackground | tümü |
default_sort_direction | defaultSortDirection | yorumlar, canlı sohbet, işbirlikçi/görsel sohbet |
number_only | numberOnly | yorum sayısı |
is_live | isLive | yorum sayısı |
count | count | son yorumlar, son tartışmalar |
target | (querySelector, gönderilmez) | işbirlikçi sohbet, görsel sohbet |
chat_square_percentage | chatSquarePercentage | görsel sohbet |
user_id | userId | kullanı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) 
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. FastCommentsidsi, bir kullanıcının yorum geçmişi için kalıcı bir tanımlayıcıdır. VarsayılanUSER_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ınidsi değiştirildiğinde geçmişi yeni bir hesaba bölünür). Bir demo dışındaki her şey içinidyi ö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) -> dicttipinde 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 
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 
REGION'u ayarlayarak widget'ları ve API'yi AB'ye yönlendirin:
FASTCOMMENTS = {"TENANT_ID": "...", "REGION": "eu"}
Gömülü işaretlemenin özelleştirilmesi 
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ı 
| Anahtar | Varsayılan | Açı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. |
REGION | None | ABD için None, AB bölgesi için "eu". |
SSO.ENABLED | False | SSO'yu aç. |
SSO.MODE | "secure" | "secure" (HMAC) veya "simple" (imzasız). |
SSO.LOGIN_URL / SSO.LOGOUT_URL | None | Oturumu kapatmış ziyaretçilere gösterilir; varsayılan reverse("login"/"logout"). |
SSO.USER_MAP | id/email/username | FastComments alanı, kullanıcı özniteliği/yolu/çağrılabilir fonksiyona. |
SSO.IS_ADMIN / IS_MODERATOR / GROUP_IDS | None | callable(user) veya noktalı yol. |
SSO.USER_MAPPER | None | callable(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 
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.