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)
- Çok dilli slug yönlendirme yardımcı fonksiyonu
- Türkçe karakter uyumlu 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.LANGUAGESayarı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.
Yardımcı Fonksiyonlar
turkce_slugify
Türkçe karakterleri ASCII uyumlu karşılıklarına çevirir ve ardından Django’nun slugify fonksiyonunu uygular.
from django_routines.i18n.slugify import turkce_slugify
slug = turkce_slugify("İstanbul Şehir Rehberi")
# Çıktı: istanbul-sehir-rehberi
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:
isim→slug - Diğer diller:
isim_en→slug_en,isim_de→slug_de,isim_ar→slug_arvb. - Model üzerinde ilgili alan yoksa güvenli şekilde atlanır
- Slug üretimi için dışarıdan bir
slugify_fonksiyonualır settings.LANGUAGESdeğiştiğinde otomatik uyum sağlar
Ö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_tr import turkce_slugify
class Blog(models.Model):
isim = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True)
def save(self, *args, **kwargs):
coklu_dil_slug_uygula(
nesne=self,
baslik_alani="isim",
slug_alani="slug",
slugify_fonksiyonu=turkce_slugify,
)
super().save(*args, **kwargs)
redirect_to_correct_i18n_slug
Aktif dile göre doğru slug alanını kontrol eder ve gerekirse doğru slug’a yönlendirme yapar.
from django_routines.i18n.slug_redirect import redirect_to_correct_i18n_slug
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_kenarile en büyük boyutu sınırlarmax_kbaltı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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_routines_tr-1.1.4.tar.gz.
File metadata
- Download URL: django_routines_tr-1.1.4.tar.gz
- Upload date:
- Size: 12.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c9fa8113a8fdfca2bac93a0faab4fac44fa0b14cba36caeffa35ac5c4d0a07c
|
|
| MD5 |
f0e1f07055b6782cafc0a7919e71565d
|
|
| BLAKE2b-256 |
e7ced25da7f31d3db29cba33655f7dd625186f34849b44774caa1aba1c26699d
|
File details
Details for the file django_routines_tr-1.1.4-py3-none-any.whl.
File metadata
- Download URL: django_routines_tr-1.1.4-py3-none-any.whl
- Upload date:
- Size: 18.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f88f839df6af0120b2d09ec981e4fa559a588bf571d44da52f27759eafa6fdb5
|
|
| MD5 |
c86d8b1dfd1a6817bc8463542ca9a35b
|
|
| BLAKE2b-256 |
605ba01fe1ede121d7618a17dc2961518b52319cb4305f1f826e042c23f3f3af
|