Skip to main content

Reusable Django routines: middleware and i18n helpers.

Project description

django-routines-tr

Django projeleri için tekrar kullanılabilir middleware, authentication backend ve yardımcı altyapı rutinleri.

Dil yönlendirmesi, admin erişim kontrolü, çok dilli slug yönetimi, e-posta ile giriş, görsel sıkıştırma ve rate limit aşımı loglama gibi tekrar eden altyapı kodlarını azaltmak için tasarlanmış, hafif ve production odaklı yardımcı araçlar içerir.


Özellikler

  • Dil duyarlı yönlendirme middleware’i
  • Admin erişim güvenlik middleware’i
  • Çok dilli slug üretimi (LANGUAGES’a göre otomatik slug set etme)
  • Unicode uyumlu çok dilli slug sistemi (Latin dışı alfabeler için otomatik destek)
  • Çok dilli slug yönlendirme yardımcı fonksiyonu
  • Alfabe otomatik tespitli coklu_slugify fonksiyonu
  • E-posta ile giriş (authentication backend)
  • Model ImageField görsellerini otomatik WEBP’e çevirme ve sıkıştırma yardımcı fonksiyonu
  • django-ratelimit entegrasyonu ile detaylı rate limit aşımı loglama

Kurulum

pip install django-routines-tr

Not:
Görsel sıkıştırma yardımcıları için Pillow gereklidir. Paket bağımlılıkları içinde otomatik kurulur.


Middleware Kullanımı

settings.py dosyanıza middleware’leri ekleyin:

MIDDLEWARE = [
    ...
    "django_routines.middleware.language_redirect.LanguageRedirectMiddleware",
    "django_routines.middleware.admin_redirect.AdminRedirectMiddleware",
]

LanguageRedirectMiddleware

  • URL’leri aktif dile göre otomatik olarak prefixler
  • Static ve media yollarını hariç tutar
  • settings.LANGUAGES ayarını dikkate alır
  • Çift dil prefix oluşumunu engeller

AdminRedirectMiddleware

  • /admin/ paneline sadece superuser erişimine izin verir
  • Yetkisiz erişimlerde HTTP 404 döner
  • Admin panelinin ifşa edilmesini azaltmaya yardımcı olur

Authentication

EmailBackend

Kullanıcıların e-posta adresi ile giriş yapmasını sağlar.

settings.py:

AUTHENTICATION_BACKENDS = [
    "django_routines.backends.email_backend.EmailBackend",
]

Örnek kullanım:

from django.contrib.auth import authenticate

user = authenticate(request, username="user@example.com", password="secret")
if user is not None:
    pass

Not: Kullanıcı modelinizde email alanının unique olması önerilir.


Unicode Uyumlu Slug Sistemi

Yeni sürüm ile birlikte slug sistemi Latin dışı alfabeleri otomatik olarak algılar ve uygun stratejiyi uygular:

  • Latin alfabeler → ASCII slug üretir
  • Arapça, Kiril, Yunanca, İbranice, CJK vb. → Unicode slug üretir
  • Slug boş kalırsa fallback üretir
  • settings.LANGUAGES değiştiğinde otomatik uyum sağlar
  • Manuel dil listesi tutmaya gerek yoktur

Bu sayede:

  • TR, EN, DE, ES, IT gibi Latin dillerde klasik SEO slug
  • AR gibi dillerde anlamlı Unicode slug
  • Google uyumlu yapı

coklu_slugify

Türkçe karakter desteği + alfabe otomatik tespiti + Unicode uyumlu slug üretimi sağlar.

from django_routines.i18n.slugify import coklu_slugify

slug = coklu_slugify("İstanbul Şehir Rehberi")
# istanbul-sehir-rehberi

slug_ar = coklu_slugify("دليل خدمات نقل المطار في تركيا")
# دليل-خدمات-نقل-المطار-في-تركيا

Teknik Özellikler

  • Türkçe karakter normalizasyonu
  • Unicode NFKC normalizasyonu
  • Latin dışı alfabe otomatik tespiti
  • allow_unicode=True otomatik aktivasyonu
  • Boş slug durumunda fallback üretimi
  • Uzunluk kontrolü

Unicode Slug URL Desteği

Unicode slug kullanılacaksa, Django’nun varsayılan <slug:slug> converter’ı yeterli değildir.

Bu nedenle paket içinde UnicodeSlugConverter tanımlanmıştır ve slugify.py içerisinde yer alır.

urls.py Kullanımı

from django.urls import path, register_converter
from django_routines.i18n.slugify import UnicodeSlugConverter
from . import views

register_converter(UnicodeSlugConverter, "uslug")

urlpatterns = [
    path("blog/<uslug:slug>/", views.blog_detay, name="blog_detay"),
]

Yapılması gereken tek değişiklik:

<slug:slug>  →  <uslug:slug>

Bu sayede:

  • Arapça
  • Rusça
  • Yunanca
  • Çince
  • İbranice

gibi tüm Unicode slug’lar sorunsuz çalışır.


coklu_dil_slug_uygula

Modelinizde settings.LANGUAGES içinde tanımlı dillere göre otomatik slug üretir ve ilgili slug alanlarına set eder.

  • Ana alan: isimslug
  • Diğer diller: isim_enslug_en, isim_deslug_de, isim_arslug_ar vb.
  • Model üzerinde ilgili alan yoksa güvenli şekilde atlanır
  • Slug üretimi için dışarıdan bir slugify_fonksiyonu alır
  • Unicode alfabeler otomatik desteklenir

Örnek kullanım (model save içinde):

from django.db import models
from django_routines.i18n.coklu_dil_slug_save import coklu_dil_slug_uygula
from django_routines.i18n.slugify import coklu_slugify

class Blog(models.Model):
    isim = models.CharField(max_length=255)
    # allow_unicode=True → Arapça ve diğer Unicode alfabelerde slug üretimini destekler
    slug = models.SlugField(max_length=255, unique=True, blank=True, null=True, allow_unicode=True)

    def save(self, *args, **kwargs):
        coklu_dil_slug_uygula(
            nesne=self,
            baslik_alani="isim",
            slug_alani="slug",
            slugify_fonksiyonu=coklu_slugify,
        )
        super().save(*args, **kwargs)

dogru_i18n_slug_icin_yonlendir

Aktif dile göre doğru slug alanını kontrol eder ve gerekirse doğru slug’a yönlendirme yapar.

from django_routines import dogru_i18n_slug_icin_yonlendir

response = dogru_i18n_slug_icin_yonlendir(
    obj=article,
    current_slug=slug,
    url_name="article_detail",
)

if response:
    return response

Rate Limit Aşımı Loglama

ratelimit_sinir

django-ratelimit ile birlikte çalışır.
Rate limit aşıldığında (HTTP 429) detaylı güvenlik log’u üretir.

Loglanan bilgiler:

  • Client IP (X-Forwarded-For destekli)
  • Kullanıcı ID ve username (authenticated ise)
  • Path ve HTTP method
  • Query string
  • Referer
  • User-Agent
  • Accept-Language
  • Host
  • Session key
  • POST key listesi
  • Truncate edilmiş body preview

Kurulum

1) Middleware Ekleyin

settings.py dosyanıza aşağıdaki middleware’i ekleyin
(Genellikle listenin alt kısmında olması önerilir):

MIDDLEWARE = [
    ...
    "django_ratelimit.middleware.RatelimitMiddleware",
]

2) Rate Limit Handler Tanımlayın

RATELIMIT_VIEW = "django_routines.ratelimit_sinir.ratelimit_exceeded"

3) Cache Ayarı (Production Önerisi)

django-ratelimit cache tabanlı çalışır.
Multi-worker production ortamda LocMemCache önerilmez.

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
    }
}

Redis veya Memcached gibi paylaşımlı cache kullanılması önerilir.


4) View Üzerinde Kullanım

from django_ratelimit.decorators import ratelimit

@ratelimit(key="ip", rate="3/m", method="POST", block=True)
def iletisim(request):
    ...

Limit aşıldığında otomatik olarak 429 döner ve ratelimit_sinir handler’ı çalışarak detaylı güvenlik log'u üretir.


Sunucu Üzerinde Logging İzleme

sudo journalctl -u gunicorn-ismi -f -o cat | grep rate_limit_sinir

Görsel Sıkıştırma

resim_sikistir

Model üzerindeki bir ImageField alanını:

  • Eski görsel değiştiyse eski_<upload_to>/ klasörüne taşır
  • WEBP formatına çevirir
  • max_kenar ile en büyük boyutu sınırlar
  • max_kb altına düşene kadar kaliteyi optimize eder

Örnek kullanım:

from django.db import models
from django_routines.images.compress import resim_sikistir

class Urun(models.Model):
    resim = models.ImageField(upload_to="urun_resimleri/", blank=True, null=True)

    def save(self, *args, **kwargs):
        resim_sikistir(self, "resim", dosya_adi="urun", max_kb=200, max_kenar=1200)
        super().save(*args, **kwargs)

Gereksinimler

  • Python 3.10+
  • Django 4.2+

Lisans

Apache Lisansı

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_routines_tr-1.1.6.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_routines_tr-1.1.6-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file django_routines_tr-1.1.6.tar.gz.

File metadata

  • Download URL: django_routines_tr-1.1.6.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for django_routines_tr-1.1.6.tar.gz
Algorithm Hash digest
SHA256 571900eedf84f32069f6f48cbabf85c3ab6429b25f3327fc00913aea6808855f
MD5 1dcc0af52c75a618fddc9b2e31325e16
BLAKE2b-256 43b6627985aa443fd4901fafd00855523fb8c4afa4c058a39dab6bb914597b31

See more details on using hashes here.

File details

Details for the file django_routines_tr-1.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for django_routines_tr-1.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 a5c40f25f76cef387a3660a9bde99a97317b3b0ca2d00b3cad4b39c32037ffa2
MD5 9efd4fced0d065cd3f83e59db2711bae
BLAKE2b-256 afcf3aa3b85b2f03bc2656c31c3c3c55c7a9ea77d02169ddfad41de4fb23e70d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page