FeinCMS Kurulumu ve Başlangıç Rehberi
Django ekosistemi, web geliştiricilerine sunduğu esneklik ve güçlü yapısıyla öne çıkarken, içerik yönetim sistemleri (CMS) konusunda da çeşitli çözümler sunar. Bu çözümlerden biri olan FeinCMS, geliştiricilere yüksek düzeyde kontrol sağlayan, modüler ve esnek bir CMS çerçevesidir. Geleneksel “kutu dışı” CMS’lerin aksine, FeinCMS, Django projelerinize sorunsuz bir şekilde entegre olabilen, içerik modellerinizi ve şablonlarınızı tamamen sizin kontrolünüzde tutmanızı sağlayan bir araç takımı sunar. Bu kapsamlı rehberde, FeinCMS’i Django projenize nasıl kuracağınızı, temel yapılandırmaları nasıl yapacağınızı ve ilk sayfanızı nasıl oluşturacağınızı adım adım inceleyeceğiz. Amacımız, geliştiricilere FeinCMS’in gücünü keşfetmeleri ve projelerinde etkin bir şekilde kullanmaya başlamaları için sağlam bir temel sunmaktır.
FeinCMS, özellikle karmaşık içerik yapılarına sahip veya tamamen özelleştirilmiş bir yönetim paneli deneyimi arayan projeler için idealdir. “Parçalı” (block-based) içerik yaklaşımı sayesinde, farklı içerik türlerini (zengin metin, resim, video, özel widget’lar) bir sayfada bir araya getirme ve sürükle-bırak arayüzü ile kolayca yönetme imkanı sunar. Bu esneklik, hem geliştiricilerin hem de içerik yöneticilerinin ihtiyaçlarını karşılayacak güçlü bir araç olmasını sağlar.
Ön Gereksinimler
FeinCMS ile çalışmaya başlamadan önce, sisteminizde bazı temel bileşenlerin kurulu olduğundan emin olmalısınız. Bu ön gereksinimler, sorunsuz bir kurulum ve geliştirme süreci için kritik öneme sahiptir.
Python ve Django
FeinCMS bir Django uygulaması olduğundan, öncelikle sisteminizde Python’un kurulu olması gerekir. Python 3.8 veya üzeri bir sürüm önerilir. Python’un kurulu olup olmadığını python --version komutu ile kontrol edebilirsiniz. Ardından, Django’nun kurulu olması gerekmektedir. FeinCMS, belirli Django sürümleriyle uyumludur; genellikle en son stabil Django sürümleriyle uyumluluk sağlanır. Bu rehberde, Django’nun en son LTS (Uzun Süreli Destek) sürümünü kullanmanızı tavsiye ederiz.
Veritabanı
Django projeleri için çeşitli veritabanı seçenekleri mevcuttur. Geliştirme aşamasında SQLite yeterli olsa da, üretim ortamları için PostgreSQL veya MySQL gibi daha güçlü veritabanlarını kullanmanız önerilir. FeinCMS’in ağaç yapıları (MPTT) ile çalışması nedeniyle, PostgreSQL genellikle tercih edilen bir seçenektir ve daha iyi performans sunabilir.
Sanal Ortam (Virtual Environment)
Herhangi bir Python projesinde olduğu gibi, FeinCMS ile çalışırken de bir sanal ortam kullanmak en iyi pratiktir. Sanal ortamlar, projenizin bağımlılıklarını sistem genelindeki Python kurulumundan izole etmenizi sağlar. Bu, farklı projeler için farklı bağımlılık versiyonlarına sahip olmanıza olanak tanır ve bağımlılık çakışmalarını önler.
Sanal Ortam Oluşturma ve Projeyi Hazırlama
Sanal ortam oluşturma ve temel Django projesini hazırlama adımları, FeinCMS kurulumuna başlamadan önceki ilk ve en önemli adımlardır.
Sanal Ortam Oluşturma
Öncelikle, projeniz için bir dizin oluşturun ve bu dizine geçiş yapın:
mkdir myfeincms_project
cd myfeincms_project
Şimdi, bu dizin içinde bir sanal ortam oluşturalım:
python -m venv venv
Bu komut, myfeincms_project dizini içinde venv adında bir dizin oluşturacak ve bu dizin içinde izole bir Python ortamı kuracaktır.
Sanal Ortamı Etkinleştirme
Sanal ortamı etkinleştirmek için işletim sisteminize göre farklı komutlar kullanılır:
* Linux/macOS:
source venv/bin/activate
* Windows (Command Prompt):
venv\Scripts\activate.bat
* Windows (PowerShell):
venv\Scripts\Activate.ps1
Sanal ortam etkinleştirildiğinde, komut isteminizin başında (venv) gibi bir ifade göreceksiniz.
Django Kurulumu ve Proje Oluşturma
Sanal ortam etkin durumdayken, Django’yu kurabiliriz:
pip install Django
Django kurulduktan sonra, yeni bir Django projesi oluşturalım:
django-admin startproject config .
Burada config projenizin ana yapılandırma dizini olacak, . ise projenin mevcut dizinde oluşturulmasını sağlayacaktır.
Veritabanı ve Süper Kullanıcı Oluşturma
İlk Django projemiz için temel veritabanı tablolarını oluşturalım ve yönetim paneline erişim için bir süper kullanıcı tanımlayalım:
python manage.py migrate
python manage.py createsuperuser
Bu adımlarla birlikte, FeinCMS kurulumuna hazır bir Django projesi temeli oluşturmuş oluyoruz.
FeinCMS Kurulumu
Artık Django projemiz hazır olduğuna göre, FeinCMS’i kurmaya ve yapılandırmaya başlayabiliriz.
FeinCMS ve Bağımlılıklarını Yükleme
Sanal ortamınız etkin durumdayken, FeinCMS’i pip aracılığıyla yükleyin:
pip install feincms Pillow
Pillow, FeinCMS’in resim işleme yetenekleri için gereklidir.
INSTALLED_APPS Yapılandırması
FeinCMS ve bağımlılıklarını Django projenize tanıtmak için config/settings.py dosyanızdaki INSTALLED_APPS listesini güncellemeniz gerekir. Sıralama önemlidir, bu yüzden aşağıdaki gibi eklemeniz tavsiye edilir:
# config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# FeinCMS ve bağımlılıkları
'mptt', # FeinCMS'in ağaç yapıları için
'feincms',
'feincms.module.page', # Sayfa modülü
'feincms.module.medialibrary', # Medya kütüphanesi modülü
# 'feincms.module.extensions', # İsteğe bağlı, ek uzantılar için
]
* mptt: Django için Modifiye Edilmiş Önek Geçiş Ağacı (Modified Preorder Tree Traversal) uygulamasını sağlar ve FeinCMS’in sayfa hiyerarşilerini yönetmesi için gereklidir.
* feincms: FeinCMS’in çekirdek uygulamasını içerir.
* feincms.module.page: Sayfa yönetimi için gerekli modüldür. Bu modül olmadan FeinCMS ile sayfa oluşturamazsınız.
* feincms.module.medialibrary: Resimler, dosyalar ve diğer medya öğelerini yönetmek için bir medya kütüphanesi sağlar.
* feincms.module.extensions: SEO, alıntı gibi ek özellikler sunan uzantıları etkinleştirmek için kullanılır.
Veritabanı Migrasyonları
INSTALLED_APPS listesini güncelledikten sonra, FeinCMS’in ve bağımlılıklarının veritabanı tablolarını oluşturmak için migrasyonları çalıştırmalısınız:
python manage.py migrate
Bu komut, mptt, feincms ve diğer eklediğiniz FeinCMS modüllerinin veritabanı şemalarını uygulayacaktır.
FeinCMS Yapılandırması
FeinCMS’in projenizle düzgün çalışması için urls.py ve settings.py dosyalarında bazı ek yapılandırmalar yapmanız gerekmektedir.
urls.py Güncelleme
FeinCMS’in URL yönlendirmelerini projenize dahil etmek için config/urls.py dosyanızı güncellemelisiniz. FeinCMS, sayfa URL’lerini kendi içinde yönettiği için, tüm kök URL’leri ona yönlendirmek en yaygın yaklaşımdır.
# config/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('feincms.urls')), # FeinCMS URL'lerini dahil et
]
Bu yapılandırma, admin/ dışındaki tüm URL isteklerini FeinCMS’in sayfa çözümleyicisine yönlendirecektir.
settings.py Ayarları
FeinCMS’in düzgün çalışması için settings.py dosyanızda ek ayarlar yapmanız gerekebilir. Özellikle statik dosyalar, medya dosyaları ve zengin metin düzenleyici yapılandırması önemlidir.
# config/settings.py
... diğer ayarlar ...
Statik ve Medya Dosyaları
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles' # Üretim için
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media' # Kullanıcı tarafından yüklenen dosyalar için
FeinCMS zengin metin düzenleyici yapılandırması (örneğin TinyMCE veya CKEditor)
FeinCMS, varsayılan olarak TinyMCE'yi kullanır ve bunu yapılandırmak için bazı varsayılanlar sağlar.
Eğer farklı bir editör kullanacaksanız veya TinyMCE'yi özelleştirecekseniz burayı değiştirebilirsiniz.
FEINCMS_RICHTEXT_INIT_CONTEXT = {
'TINYMCE_JS_URL': STATIC_URL + 'tinymce/tinymce.min.js',
'TINYMCE_CONFIG': {
'plugins': 'advlist,autolink,lists,link,image,charmap,preview,anchor,'
'searchreplace,visualblocks,code,fullscreen,insertdatetime,media,table,code,help,wordcount',
'toolbar': 'undo redo | formatselect | '
'bold italic backcolor | alignleft aligncenter '
'alignright alignjustify | bullist numlist outdent indent | '
'removeformat | help',
'menubar': 'file edit view insert format tools table help',
'height': 300,
'skin': 'oxide', # veya 'dark'
'content_css': 'default',
},
}
FEINCMS_RICHTEXT_INIT_TEMPLATE = 'admin/feincms/richtext/init_tinymce.html'
... diğer ayarlar ...
* STATIC_URL ve STATIC_ROOT: Django’nun statik dosyalarını (CSS, JS, resimler) yönetmek için gereklidir. FeinCMS admin paneli de bu statik dosyaları kullanır.
* MEDIA_URL ve MEDIA_ROOT: Kullanıcıların yüklediği resimler ve diğer dosyalar için kullanılır. FeinCMS’in medya kütüphanesi bu ayarları kullanır.
* FEINCMS_RICHTEXT_INIT_CONTEXT ve FEINCMS_RICHTEXT_INIT_TEMPLATE: FeinCMS’in yönetim panelindeki zengin metin düzenleyicisini (varsayılan olarak TinyMCE) yapılandırmak için kullanılır. Bu ayarlar, düzenleyicinin görünümünü, eklentilerini ve butonlarını özelleştirmenize olanak tanır. Kendi TinyMCE kurulumunuzu veya farklı bir düzenleyiciyi entegre etmek isterseniz bu ayarları değiştirmeniz gerekecektir. TinyMCE’nin tinymce.min.js dosyasını STATIC_ROOT altında tinymce klasörüne kopyalamanız gerekebilir.
Bu temel yapılandırmalarla, FeinCMS projenizin temelini atmış olursunuz.
İlk FeinCMS Sayfanızı Oluşturma
FeinCMS’in kalbi, sayfalar ve bu sayfaları oluşturan içerik parçacıklarıdır. Şimdi, ilk sayfa modelimizi tanımlayacak, şablonlarımızı oluşturacak ve yönetim panelinden bir sayfa ekleyeceğiz.
page.models.py Oluşturma
FeinCMS, feincms.module.page.models.Page modelini kullanarak sayfa hiyerarşisini ve içeriği yönetir. Bu modeli projenize entegre etmek için, genellikle uygulamanızın models.py dosyasında veya ayrı bir page.models.py dosyasında yapılandırmaları yaparsınız. Projenizin kök dizininde (veya bir Django uygulaması içinde) page.models.py adında bir dosya oluşturalım:
# page.models.py
from django.utils.translation import gettext_lazy as _
from feincms.module.page.models import Page
from feincms.content.richtext.models import RichTextContent
from feincms.content.image.models import ImageContent
from feincms.content.file.models import FileContent
1. Sayfa Şablonlarını Tanımlama
Page.register_templates(
{
'key': 'base',
'title': _('Temel Şablon'),
'path': 'page/base.html',
'regions': (
('main', _('Ana İçerik Alanı')),
('sidebar', _('Yan Menü Alanı')),
),
},
{
'key': 'two_column',
'title': _('İki Sütunlu Şablon'),
'path': 'page/two_column.html',
'regions': (
('main', _('Sol Sütun')),
('right_column', _('Sağ Sütun')),
),
},
)
2. İçerik Tiplerini Kaydetme
Bu içerik tipleri, yönetim panelinde bir sayfaya eklenebilecek bloklardır.
Page.create_content_type(RichTextContent, regions=('main', 'right_column', 'sidebar'))
Page.create_content_type(ImageContent, regions=('main', 'right_column', 'sidebar'))
Page.create_content_type(FileContent, regions=('main', 'right_column', 'sidebar'))
3. İsteğe Bağlı: Uzantıları Kaydetme
FeinCMS, SEO veya alıntı gibi ek özellikler için uzantılar sunar.
Bunları kullanmak için 'feincms.module.extensions' uygulamasını INSTALLED_APPS'a eklemeyi unutmayın.
from feincms.module.extensions.seo import SEOExtension
Page.register_extensions(SEOExtension)
from feincms.module.extensions.excerpt import ExcerptExtension
Page.register_extensions(ExcerptExtension)
Bu dosya, FeinCMS’in sayfa modelini yapılandırmak için merkezi bir yerdir:
* Page.register_templates(...): Bu kısım, yönetim panelinde sayfa oluştururken seçebileceğiniz farklı şablonları tanımlar. Her şablon bir key (benzersiz tanımlayıcı), title (yönetim panelinde görünen ad), path (şablon dosyasının yolu) ve regions (içerik bloklarının yerleştirilebileceği alanlar) içerir.
* Page.create_content_type(...): Bu metod, sayfalara eklenebilecek içerik türlerini (content types) kaydeder. Örneğin, RichTextContent zengin metin editörü sağlar, ImageContent resim yüklemeyi, FileContent ise dosya yüklemeyi mümkün kılar. regions parametresi, bu içerik türlerinin hangi bölgelerde kullanılabileceğini belirtir.
* Page.register_extensions(...): FeinCMS’in sunduğu uzantıları kaydetmek için kullanılır. Örneğin, SEOExtension sayfalara SEO başlığı, anahtar kelimeler ve açıklama alanları ekler.
Bu dosyayı oluşturduktan sonra, Django’nun bu modeli tanıması için config/settings.py dosyanıza küçük bir ekleme yapmanız gerekebilir. Eğer page.models.py dosyanızı ayrı bir Django uygulaması (örneğin my_app) içinde oluşturduysanız, my_app‘i INSTALLED_APPS‘a eklemeniz yeterlidir. Eğer doğrudan projenizin kök dizininde oluşturduysanız, Django’nun otomatik olarak modelinizi tanıması için bir __init__.py dosyası oluşturup modelinizi import etmeniz gerekebilir, ancak FeinCMS genellikle bu tür yapılandırmaları doğrudan settings.py veya urls.py gibi yerlerde yapılmasını bekler. En temiz yol, bu model tanımını özel bir Django uygulamasına koymaktır. Örneğin, content adında bir uygulama oluşturup içine koymak:
python manage.py startapp content
Sonra content/models.py içine yukarıdaki kodu yapıştırın ve INSTALLED_APPS‘a 'content' ekleyin.
# config/settings.py
INSTALLED_APPS = [
# ...
'content', # Yeni uygulamanız
# ...
]
Şablon Dosyaları Oluşturma
Yukarıda tanımladığımız şablonlar için gerçek HTML dosyalarını oluşturmamız gerekiyor. Django’nun şablon arama mekanizmasını kullanarak, projenizin kök dizininde templates adında bir klasör oluşturun ve içine page adında bir alt klasör ekleyin: templates/page/.
{% block title %}FeinCMS Sitem{% endblock %}
{# Eğer varsa #}
{% block content %}
{% endblock %}
{% extends "base.html" %}
{% load feincms_tags %} {# feincms_render_region tag'i için #}
{% block title %}{{ page.title }} | {% endblock %}
{% block content %}
{{ page.title }}
{% feincms_render_region page "main" %}
{% endblock %}
{% extends "base.html" %}
{% load feincms_tags %}
{% block title %}{{ page.title }} | {% endblock %}
{% block content %}
{{ page.title }}
{% feincms_render_region page "main" %}
{% feincms_render_region page "right_column" %}
{% endblock %}
* {% load feincms_tags %}: FeinCMS’in özel şablon etiketlerini yüklemek için gereklidir.
* {% feincms_render_region page "region_adı" %}: Bu etiket, yönetim panelinde ilgili bölgeye (region) eklenen tüm içerik bloklarını işler ve HTML’e dönüştürür.
Şablonları oluşturduktan sonra, Django’nun TEMPLATES ayarlarında DIRS listesine BASE_DIR / 'templates' eklediğinizden emin olun:
# config/settings.py
TEMPLATES = [
{
# ...
'DIRS': [BASE_DIR / 'templates'],
# ...
},
]
Veritabanı Güncelleme
Eğer content/models.py dosyanızda özel modeller veya uzantılar tanımladıysanız, bunları veritabanına yansıtmak için migrasyonları çalıştırmanız gerekebilir:
python manage.py makemigrations content # Eğer 'content' uygulamanız varsa
python manage.py migrate
Page modeli FeinCMS tarafından sağlandığı için genellikle ek bir makemigrations gerektirmez, ancak özel içerik tipleri veya uzantılar tanımladığınızda bu adım önemlidir.
Yönetim Paneli Üzerinden İçerik Oluşturma
Tüm kurulum ve yapılandırma adımlarını tamamladıktan sonra, FeinCMS yönetim panelini kullanarak ilk sayfanızı oluşturmaya hazırsınız.
1. Geliştirme Sunucusunu Başlatma:
python manage.py runserver
2. Yönetim Paneline Giriş:
Tarayıcınızda http://127.0.0.1:8000/admin/ adresine gidin ve createsuperuser komutuyla oluşturduğunuz kullanıcı adı ve şifre ile giriş yapın.
3. Sayfa Oluşturma:
Yönetim panelinde, “FEINCMS” başlığı altında “Sayfalar” (Pages) bölümünü göreceksiniz. “Sayfa ekle” (Add page) düğmesine tıklayın.
4. Sayfa Bilgilerini Girme:
* Başlık (Title): Sayfanızın başlığını girin (örneğin, “Anasayfa”).
* URL slug’ı (Slug): Sayfanızın URL’sinde kullanılacak benzersiz bir slug girin (örneğin, “anasayfa”). Eğer boş bırakırsanız, FeinCMS başlığa göre otomatik olarak oluşturacaktır.
* Şablon (Template): Açılır menüden “Temel Şablon” veya “İki Sütunlu Şablon” gibi daha önce tanımladığınız şablonlardan birini seçin.
* Durum (Status): Sayfanın yayınlanıp yayınlanmayacağını belirleyin. “Yayınlandı” (Published) seçeneğini işaretleyin.
* Ana sayfa (Is home page): Eğer bu sayfa sitenizin ana sayfası olacaksa bu kutuyu işaretleyin.
5. İçerik Ekleme:
Sayfa formunun altında, tanımladığınız “Ana İçerik Alanı”, “Yan Menü Alanı” gibi bölgeleri göreceksiniz. Her bölgenin altında “İçerik ekle” (Add content) düğmesine tıklayarak RichTextContent, ImageContent veya FileContent gibi içerik türlerini ekleyebilirsiniz.
* RichTextContent: Bir metin alanı açılacak ve buraya zengin metin (kalın, italik, bağlantı vb.) girebilirsiniz.
* ImageContent: Bir resim yüklemenize veya medya kütüphanesinden seçmenize olanak tanır.
* FileContent: Bir dosya yüklemenize olanak tanır.
İçerik bloklarını sürükleyip bırakarak sıralarını değiştirebilirsiniz.
6. Kaydetme ve Görüntüleme:
Sayfayı kaydettikten sonra, tarayıcınızda http://127.0.0.1:8000/ adresine giderek ana sayfanızı veya oluşturduğunuz diğer sayfaların URL’lerini ziyaret ederek içeriğinizi görebilirsiniz.
Medya Kütüphanesi
FeinCMS’in medya kütüphanesi (feincms.module.medialibrary), sitenizdeki resimleri, belgeleri ve diğer medya dosyalarını merkezi bir yerden yönetmenizi sağlar.
* Kurulum: INSTALLED_APPS‘a 'feincms.module.medialibrary' eklediyseniz ve python manage.py migrate komutunu çalıştırdıysanız, medya kütüphanesi zaten etkin durumdadır.
* Kullanım: Yönetim panelinde “FEINCMS” altında “Medya kütüphanesi” (Media library) bölümünü bulacaksınız. Buradan yeni medya öğeleri yükleyebilir, mevcutları düzenleyebilir ve kategorize edebilirsiniz. ImageContent veya FileContent gibi içerik türleri aracılığıyla sayfalara medya eklerken bu kütüphaneden seçim yapabilirsiniz.
Gelişmiş Özellikler ve İpuçları
FeinCMS’in gücü, modüler yapısında ve genişletilebilirliğindedir. İşte bazı gelişmiş özellikler ve ipuçları:
Özel İçerik Tipleri Oluşturma
FeinCMS’in sunduğu RichTextContent, ImageContent gibi içerik tipleri yeterli gelmediğinde, kendi özel içerik tiplerinizi oluşturabilirsiniz. Bu, bir sayfaya belirli bir veri yapısına sahip özel bir blok eklemek istediğinizde kullanışlıdır.
Örnek olarak, bir “İletişim Formu” veya “Özel HTML” bloğu oluşturabiliriz. content/models.py dosyanızda (veya uygun bir başka models.py dosyasında):
# content/models.py (veya başka bir uygulama içinde)
from django.db import models
from feincms.module.page.models import Page
from feincms.content.richtext.models import RichTextContent # Önceki tanımlar
class CustomHTMLContent(models.Model):
# Bu model, bir sayfaya ekleyebileceğiniz özel bir içerik bloğunu temsil eder.
text = models.TextField(_('HTML İçeriği'))
class Meta:
abstract = True # Bu bir abstract model olmalı, çünkü FeinCMS onu temel alacak.
verbose_name = _('Özel HTML İçeriği')
verbose_name_plural = _('Özel HTML İçerikleri')
def render(self, kwargs):
# Bu metod, içerik bloğunun frontend'de nasıl işleneceğini tanımlar.
return self.text
Page modelinize yeni içerik tipini kaydetme
Page.create_content_type(CustomHTMLContent, regions=('main', 'sidebar'))
Bu kodu ekledikten sonra, python manage.py makemigrations content ve python manage.py migrate komutlarını çalıştırmanız gerekir. Artık yönetim panelinde sayfa düzenlerken “Özel HTML İçeriği” adında yeni bir içerik bloğu seçeneği göreceksiniz.
Uzantılar (Extensions) Kullanımı
FeinCMS, sayfa modeline ek işlevsellik katmak için çeşitli uzantılar sunar.
* SEO Uzantısı (SEOExtension): Sayfalara SEO başlığı, anahtar kelimeler ve açıklama alanları ekler.
# content/models.py
from feincms.module.extensions.seo import SEOExtension
Page.register_extensions(SEOExtension)
Bunu etkinleştirdikten sonra, sayfa düzenleme ekranında SEO ile ilgili ek alanlar göreceksiniz. Bu alanları şablonlarınızda {{ page.seo_title }}, {{ page.meta_keywords }}, {{ page.meta_description }} gibi kullanabilirsiniz.
* Alıntı Uzantısı (ExcerptExtension): Sayfalar için kısa bir özet veya alıntı alanı sağlar.
# content/models.py
from feincms.module.extensions.excerpt import ExcerptExtension
Page.register_extensions(ExcerptExtension)
Şablonlarınızda {{ page.excerpt }} ile kullanabilirsiniz.
Uzantıları kullanmadan önce feincms.module.extensions uygulamasının INSTALLED_APPS içinde olduğundan emin olun.
Çoklu Dil Desteği (Multilingual Support)
FeinCMS, feincms.module.extensions.translations uzantısı ile çoklu dil desteği sunar. Bu uzantı, her sayfanın farklı dillerde çevirilerini oluşturmanıza olanak tanır.
# content/models.py
from feincms.module.extensions.translations import TranslationExtension
Page.register_extensions(TranslationExtension)
Ayrıca, settings.py dosyanızda LANGUAGES ve USE_I18N = True ayarlarını yapmanız gerekir. Çok dilli URL’ler ve içeriğin yönetimi için genellikle django-modeltranslation gibi ek paketlerle entegrasyon düşünülür.
Statik Dosyalar ve Medya Dosyaları
Geliştirme ortamında python manage.py runserver komutu statik ve medya dosyalarını otomatik olarak sunar. Ancak üretim ortamında bu dosyaların web sunucusu (Nginx, Apache) tarafından sunulması gerekir.
* python manage.py collectstatic: Tüm statik dosyaları STATIC_ROOT dizinine toplar. Bu dizini web sunucunuzun erişebileceği şekilde yapılandırmalısınız.
* MEDIA_ROOT dizini de web sunucusu tarafından okunabilir ve yazılabilir olmalıdır, böylece kullanıcılar tarafından yüklenen medya dosyaları erişilebilir olur.
Üretim Ortamı İçin Optimizasyon
* Veritabanı: Üretimde SQLite yerine PostgreSQL veya MySQL gibi güçlü bir veritabanı kullanın.
* Web Sunucusu: Django’yu doğrudan çalıştırmak yerine Gunicorn veya uWSGI gibi bir WSGI sunucusu kullanın. Nginx veya Apache gibi bir web sunucusu ile bu WSGI sunucusu arasında bir proxy görevi görecektir.
* Önbellekleme (Caching): FeinCMS, önbellekleme için Django’nun yerleşik önbellekleme çerçevesini kullanabilir. settings.py dosyanızda uygun bir önbellekleme ayarı (örneğin Redis veya Memcached tabanlı) yapılandırın.
Sorun Giderme ve Yaygın Hatalar
FeinCMS kurulumu ve kullanımı sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
* ModuleNotFoundError: No module named 'mptt': mptt paketinin pip install mptt ile kurulu olduğundan ve INSTALLED_APPS‘a eklediğinizden emin olun.
* TemplateDoesNotExist hataları:
* Şablon dosyasının yolu (path parametresi Page.register_templates içinde) doğru mu?
* settings.py dosyasındaki TEMPLATES ayarlarında DIRS listesine BASE_DIR / 'templates' eklendi mi?
* {% load feincms_tags %} etiketi şablonunuzda mevcut mu?
* Yönetim panelinde içerik blokları görünmüyor:
* Page.create_content_type() metodunu kullanarak içerik tiplerini kaydettiniz mi?
* regions parametresi doğru ayarlandı mı?
* python manage.py makemigrations ve python manage.py migrate komutlarını çalıştırdınız mı?
* Statik dosyalar (CSS/JS) yüklenmiyor:
* settings.py dosyasında STATIC_URL ve STATIC_ROOT doğru ayarlandı mı?
* Geliştirme sunucusunda DEBUG = True ise, django.contrib.staticfiles INSTALLED_APPS içinde olmalı.
* Üretimde python manage.py collectstatic çalıştırıldı mı ve web sunucusu STATIC_ROOT dizinini doğru bir şekilde sunuyor mu?
* Resim yüklerken hata: Pillow kütüphanesinin pip install Pillow ile kurulu olduğundan emin olun.
Sonuç
FeinCMS, Django geliştiricileri için son derece esnek ve güçlü bir içerik yönetim sistemi çerçevesidir. Modüler yapısı, blok tabanlı içerik yönetimi ve genişletilebilirlik özellikleri sayesinde, özel ihtiyaçlara göre tasarlanmış web siteleri ve uygulamalar oluşturmak için ideal bir araçtır. Bu rehberde, FeinCMS’in temel kurulumundan ilk sayfanızı oluşturmaya, medya kütüphanesini kullanmaya ve gelişmiş özelliklere kadar birçok konuyu ele aldık.
FeinCMS, başlangıçta biraz daha fazla yapılandırma gerektirse de, sunduğu kontrol ve özelleştirme imkanları, karmaşık içerik projelerinde geliştiricilere büyük avantajlar sağlar. Kendi içerik tiplerinizi, şablonlarınızı ve uzantılarınızı tanımlayarak, projenizin tam olarak istediğiniz gibi çalışmasını sağlayabilirsiniz.
Unutmayın ki bu rehber bir başlangıç noktasıdır. FeinCMS’in tüm potansiyelini keşfetmek için resmi dokümantasyonunu incelemenizi ve topluluk kaynaklarından faydalanmanızı şiddetle tavsiye ederiz. İyi geliştirmeler!