Django Admin'i "Bize Özgü" Yapmak: Tam Kapsamlı Türkiye Optimizasyonu

Django Admin panelini Türkiye’deki kullanıcılar ve yerel gereksinimler için optimize etmek, projenizin profesyonelliğini artırır. Bu makalede, dil ayarlarından tarih formatlarına ve bölgesel saat dilimine kadar adım adım özelleştirme sürecini inceleyeceğiz.

Web projelerinizde Django'nun sunduğu o güçlü admin panelini kullanırken, arayüzü Türkiye'deki kullanıcıların alışkanlıklarına göre optimize etmek projenizin kalitesini doğrudan artırır. Django Admin Türkçeleştirme, doğru saat dilimi (timezone) ayarları ve model isimlerini yerelleştirme gibi temel adımlar, her Django geliştiricisinin bilmesi gereken detaylardır. Bu makalede, settings.py yapılandırmasından başlayarak, yönetim panelinizi baştan aşağı Türkiye standartlarına göre nasıl özelleştireceğinizi öğrenip projelerinize profesyonel bir dokunuş katacaksınız.


1. Temel Yerelleştirme Ayarları

İlk adım, settings.py dosyasında Django'nun Türkiye standartlarını kullanmasını sağlamaktır.

Python:
# settings.py

# Dil kodunu Türkçe yapın
LANGUAGE_CODE = 'tr-TR'

# Saat dilimini Türkiye olarak ayarlayın
TIME_ZONE = 'Europe/Istanbul'

USE_I18N = True  # Uluslararasılaştırma desteği
USE_L10N = True  # Yerelleştirme desteği (formatlar için)
USE_TZ = True    # Veritabanında UTC kullanır, görüntülemede yerel saate çevirir

2. Admin Başlıklarını ve Metinlerini Türkçeleştirme

Admin panelinin üst kısmında yer alan "Django Administration" gibi İngilizce ibareleri markanıza veya projenize uygun şekilde değiştirebilirsiniz. Bunun için urls.py dosyasını kullanmak en pratik yoldur.

Python:
# urls.py
from django.contrib import admin
from django.urls import path

admin.site.site_header = "Şirket Paneli Yönetimi"
admin.site.site_title = "Yönetim Paneli"
admin.site.index_title = "Hoş Geldiniz"

3. Model İsimlerini ve Alanları Özelleştirme

Django modelleri varsayılan olarak sınıf isimlerini kullanır (Örn: "Product" için "Products"). Türkiye'deki çoğul eklerine ve harf kurallarına (i/İ, ı/I karmaşası) uygun hale getirmek için Meta sınıfını kullanmalısınız.

Python:
from django.db import models

class Urun(models.Model):
    ad = models.CharField(max_length=100, verbose_name="Ürün Adı")
    fiyat = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="Birim Fiyatı")

    class Meta:
        verbose_name = "Ürün"
        verbose_name_plural = "Ürünler"

    def __str__(self):
        return self.ad

4. Tarih ve Para Birimi Formatları

Türkiye'de tarih formatı genellikle GG.AA.YYYY şeklindedir. Django'nun bu formatı her yerde doğru göstermesi için settings.py içinde şu eklemeyi yapabilirsiniz:

Python:
# settings.py
FORMAT_MODULE_PATH = [
    'proje_adi.formats',
]

Daha sonra projenizde formats/tr/formats.py dosyası oluşturup özel formatlar tanımlayabilirsiniz. Ancak USE_L10N = True ayarı çoğu zaman standart Türk formatlarını otomatik getirecektir.


5. Görsel Özelleştirme ve Dashboard Düzeni

Admin panelini daha "Türk işi" ve kullanışlı hale getirmek için ModelAdmin sınıflarını optimize edin. Arama çubukları ve filtreler eklemek kullanıcı deneyimini iyileştirir.

Python:
# admin.py
from django.contrib import admin
from .models import Urun

@admin.register(Urun)
class UrunAdmin(admin.ModelAdmin):
    list_display = ('ad', 'fiyat', 'kayit_tarihi') # Listede görünecek sütunlar
    list_filter = ('kayit_tarihi',)                # Sağ taraftaki filtre paneli
    search_fields = ('ad',)                        # Arama kutusu

Önemli İpucu: Büyük/Küçük Harf Hassasiyeti

Türkçe "i" ve "I" harfleri yazılım dünyasında meşhur bir sorundur. Veritabanı sorgularında (Örn: __icontains) sorun yaşamamak için veritabanınızın (PostgreSQL önerilir) Turkish (tr_TR) collation desteğine sahip olduğundan emin olun.


Bu ayarlar sayesinde Django Admin paneliniz tamamen Türkçe ve Türkiye standartlarına uygun bir görünüme kavuşacaktır.


Django Admin’i Türkiye’ye uygun, kurumlara özel ve profesyonel hale getirmek oldukça yaygın bir ihtiyaçtır. Özellikle okul, kurum yönetimi veya şirket projelerinde varsayılan admin paneli yeterli gelmez. 


1. Django Admin Nedir?

Django Admin, Django’nun otomatik oluşturduğu yönetim panelidir.

Avantajları:

  • Otomatik CRUD

  • Kullanıcı yetkilendirme

  • Model yönetimi

  • Güvenlik

Admin adresi:

/admin

2. Türkiye İçin Temel Ayarlar

İlk olarak proje ayarlarını Türkiye'ye göre optimize etmeliyiz.

settings.py

LANGUAGE_CODE = 'tr-tr'

TIME_ZONE = 'Europe/Istanbul'

USE_I18N = True

USE_TZ = True

Bu sayede:

  • Türkçe tarih formatı

  • Türkçe admin paneli

  • Türkiye saat dilimi

aktif olur.


3. Admin Panel Başlığını Değiştirme

Django admin başlığı değiştirilebilir.

admin.py

from django.contrib import admin

admin.site.site_header = "Okul Yönetim Sistemi"
admin.site.site_title = "Yönetim Paneli"
admin.site.index_title = "Hoş Geldiniz"

Admin paneli artık şöyle görünür:

Okul Yönetim Sistemi
Yönetim Paneli
Hoş Geldiniz

4. Model Liste Görünümünü Özelleştirme

Varsayılan admin listeleri genelde yetersizdir.

Model

class Ogrenci(models.Model):
    ad = models.CharField(max_length=100)
    soyad = models.CharField(max_length=100)
    numara = models.IntegerField()
    sinif = models.CharField(max_length=10)

admin.py

@admin.register(Ogrenci)
class OgrenciAdmin(admin.ModelAdmin):

    list_display = ("numara", "ad", "soyad", "sinif")

    search_fields = ("ad", "soyad", "numara")

    list_filter = ("sinif",)

    ordering = ("numara",)

Artık admin paneli:

✔ arama
✔ filtre
✔ sıralama

özelliklerine sahip olur.


5. Türkçe Alan İsimleri

Model alanlarını Türkçeleştirmek için:

class Ogrenci(models.Model):

    ad = models.CharField("Ad", max_length=100)
    soyad = models.CharField("Soyad", max_length=100)
    numara = models.IntegerField("Okul Numarası")

    class Meta:
        verbose_name = "Öğrenci"
        verbose_name_plural = "Öğrenciler"

Admin panelinde artık:

Öğrenciler
Ad
Soyad
Okul Numarası

görünür.


6. Admin Panel Tema Değiştirme

Varsayılan admin teması sade görünür.

Profesyonel projelerde tema kullanılır.

Popüler paket:

Jazzmin

django-jazzmin


Kurulum

pip install django-jazzmin

settings.py

INSTALLED_APPS = [
    "jazzmin",
    "django.contrib.admin",
]

Sonuç

Admin paneli artık:

  • modern

  • responsive

  • dashboard'lu

bir hale gelir.


7. Dashboard Widget Eklemek

Admin paneline dashboard eklenebilir.

Örnek:

  • öğrenci sayısı

  • kitap sayısı

  • ödünç verilen kitaplar


admin.py

from django.db.models import Count
from .models import Ogrenci

class DashboardView(admin.ModelAdmin):

    def changelist_view(self, request, extra_context=None):

        extra_context = extra_context or {}

        extra_context['ogrenci_sayisi'] = Ogrenci.objects.count()

        return super().changelist_view(request, extra_context=extra_context)

8. Admin Yetki Sistemi

Admin panelini güvenli yapmak gerekir.

Gruplar

  • Müdür

  • Öğretmen

  • Memur

Django bunu hazır sunar.

Admin:

/admin/auth/group

Yetki Örneği

Öğretmen:

✔ öğrenci görebilir
❌ silemez


9. Admin Action Özelliği

Toplu işlem yapılabilir.

Örnek

Toplu öğrenci pasif yapma.

def pasif_yap(modeladmin, request, queryset):

    queryset.update(aktif=False)

pasif_yap.short_description = "Seçilen öğrencileri pasif yap"

admin.py

class OgrenciAdmin(admin.ModelAdmin):

    actions = [pasif_yap]

10. Admin Formlarını Özelleştirme

Admin formunu düzenleyebiliriz.

class OgrenciAdmin(admin.ModelAdmin):

    fieldsets = (

        ("Kişisel Bilgiler", {
            "fields": ("ad", "soyad")
        }),

        ("Okul Bilgileri", {
            "fields": ("numara", "sinif")
        }),
    )

Form artık bölümlere ayrılır.


11. Admin Arayüzünü Tamamen Değiştirmek

İleri seviye projelerde:

Admin template override edilir.

Dizin:

templates/admin/

Örnek:

templates/admin/base_site.html

Örnek Template

{% extends "admin/base.html" %}

{% block branding %}
<h1>Okul Yönetim Sistemi</h1>
{% endblock %}

12. Türkiye’ye Özel Özellikler

Türkiye projelerinde sık kullanılan alanlar:

  • TC Kimlik No

  • Telefon

  • İl

  • İlçe

Örnek model:

class Personel(models.Model):

    tc = models.CharField(max_length=11)

    telefon = models.CharField(max_length=15)

    il = models.CharField(max_length=50)

    ilce = models.CharField(max_length=50)

13. TC Kimlik Doğrulama

Admin panelinde doğrulama yapılabilir.

def clean_tc(self):

    tc = self.cleaned_data["tc"]

    if len(tc) != 11:
        raise forms.ValidationError("TC Kimlik No 11 haneli olmalıdır")

    return tc

14. Profesyonel Admin Paketleri

Popüler Django admin paketleri:

PaketAmaç
Jazzmin                Modern admin
django-admin-interface                Tema değiştirme
django-import-export                Excel veri aktarımı

Örnek paket:

django-import-export


15. Excel Import Export

Kurulum:

pip install django-import-export

admin.py

from import_export.admin import ImportExportModelAdmin

@admin.register(Ogrenci)
class OgrenciAdmin(ImportExportModelAdmin):
    pass

Artık admin panelinde:

  • Excel export

  • Excel import

vardır.


Sonuç

Django Admin'i tamamen profesyonel hale getirebiliriz.

Öğrendiklerimiz:

✔ Türkçeleştirme
✔ Admin görünüm özelleştirme
✔ Dashboard ekleme
✔ Yetkilendirme
✔ Tema değiştirme
✔ Excel entegrasyonu


Şimdi Django için gerçekten SaaS seviyesinde profesyonel admin paneli oluşturmada kullanılan 25 ileri seviye teknik ve kurumsal admin mimarisini anlatacağım. Bu teknikler büyük projelerde (ERP, okul sistemi, CRM vb.) kullanılır.


Django Admin’i SaaS Seviyesine Çıkarmak için 25 Profesyonel Teknik


1. Modern Admin Teması Kullanmak

Varsayılan Django Admin çok basittir.

Profesyonel projelerde tema kullanılır.

Popüler tema:

  • django-jazzmin

Kurulum:

pip install django-jazzmin

settings.py

INSTALLED_APPS = [
    "jazzmin",
    "django.contrib.admin",
]

Kazanç:

  • modern arayüz

  • sidebar menu

  • dashboard

  • responsive tasarım


2. Admin Dashboard Oluşturmak

Admin paneline analitik dashboard eklenir.

Örnek metrikler:

  • toplam kullanıcı

  • aktif kullanıcı

  • satış

  • sistem logları

Dashboard için paket:

  • django-admin-tools


3. Admin Menü Yapısını Düzenlemek

Büyük projelerde admin menüsü çok karmaşık olur.

Jazzmin ile menü düzenleme:

JAZZMIN_SETTINGS = {

 "topmenu_links": [

 {"name": "Ana Sayfa", "url": "admin:index"},
 {"name": "Kullanıcılar", "model": "auth.User"},
 ]
}

4. Admin Grafikler

Dashboard’a grafik eklenir.

Kullanılan paket:

  • django-admin-charts

Örnek grafikler:

  • aylık kullanıcı sayısı

  • satış grafiği

  • kayıt grafiği


5. Admin Arama Performansı

Büyük veri tabanlarında admin arama yavaşlar.

search_fields = ["ad", "soyad", "email"]

İleri seviye:

search_fields = ["^ad", "^soyad"]

^ = index kullanır.


6. Admin Pagination

Varsayılan sayfa:

list_per_page = 20

Profesyonel projelerde:

list_per_page = 100

7. Admin Otomatik Slug

prepopulated_fields = {"slug": ("baslik",)}

8. Inline Model Kullanmak

Örnek:

Kitap – Yazar ilişkisi

class KitapInline(admin.TabularInline):
    model = Kitap

9. Admin Readonly Alanlar

readonly_fields = ("olusturma_tarihi",)

10. Admin Otomatik Kullanıcı Kaydı

def save_model(self, request, obj, form, change):

    if not obj.pk:
        obj.olusturan = request.user

    super().save_model(request, obj, form, change)

11. Soft Delete Sistemi

Profesyonel projelerde veri silinmez.

Model:

is_deleted = models.BooleanField(default=False)

Admin:

def get_queryset(self, request):

    return super().get_queryset(request).filter(is_deleted=False)

12. Admin Export Özelliği

Excel export için:

  • django-import-export


13. Admin CSV Export

import csv
from django.http import HttpResponse

14. Admin Log Sistemi

Django zaten log tutar.

Model:

LogEntry

Ama SaaS sistemlerde ayrıca:

  • audit log

  • user activity log

tutulur.


15. Admin Activity Tracking

Paket:

  • django-simple-history


16. Admin Rate Limit

Admin brute force saldırılarına karşı korunmalı.

Paket:

  • django-ratelimit


17. Admin IP Restriction

Admin paneli sadece belirli IP'lerden açılır.

Middleware:

if request.path.startswith('/admin'):

18. Admin Two Factor Authentication

Paket:

  • django-two-factor-auth


19. Admin Custom Filter

class AktifFilter(admin.SimpleListFilter):

20. Admin Bulk Update

actions = ["aktif_yap"]

21. Admin Query Optimizasyonu

list_select_related = ("yazar",)

22. Admin Template Override

Dizin:

templates/admin

Örnek:

base_site.html

23. Admin CSS Eklemek

<link rel="stylesheet" href="/static/admin.css">

24. Admin JavaScript Eklemek

class Media:

    js = ("admin.js",)

25. Admin API Entegrasyonu

Admin paneli ile API birlikte çalışabilir.

Örneğin:

  • admin veri girer

  • mobil uygulama veriyi kullanır

Bu mimari genelde:

  • Django REST Framework

  • Flutter

  • React

ile kullanılır.


Kurumsal Django Admin Mimarisi

Profesyonel bir Django projesinde admin şu şekilde tasarlanır:

project
│
├── apps
│   ├── users
│   ├── products
│   ├── orders
│
├── admin
│   ├── dashboard
│   ├── reports
│   ├── analytics
│
├── api
│
├── core
│
├── templates
│   └── admin

Profesyonel Admin Dashboard İçeriği

Dashboard genelde şunları içerir:

📊 Günlük kullanıcı sayısı
📊 satış raporu
📊 sistem hataları
📊 yeni kayıtlar
📊 aktif kullanıcılar


Gerçek Dünya Django Admin Kullanımı

Büyük projelerde admin şu amaçla kullanılır:

Sistem    Kullanım
ERP        veri yönetimi
Okul sistemi        öğrenci kayıt
CRM        müşteri yönetimi
E-ticaret        ürün yönetimi
SaaS        kullanıcı yönetimi

Sana Özel Tavsiye

Sen şu konularla ilgileniyorsun:

  • Django API

  • Flutter

  • sistem mimarisi

Bu yüzden sana en faydalı konu:

“Django Admin + API + Mobil uygulama mimarisi”



Yorumlar

Bu blogdaki popüler yayınlar

Pardus Üzerine Django Kurulumu

Python ile Web Geliştirme: Django App Oluşturma