İçeriğe geç

Django Özelleştirilmiş Yönetim Komutları (Custom management commands)

Okuma süresi 4 dakika

Giriş.

Herkese merhabalar. Django uygulamanızı yönetebilmeniz ve uygulama ile etkileşime geçebilme adına yerleşik komutlara sahiptir. Hangi seviyede bir proje geliştirdiğimizden bağımsız olarak her Django geliştiricisi bu komutları kullanmıştır.

Örneğin django-admin startproject ile yeni bir proje başlatmak, python manage.py runserver ile geliştirme sunucusunu ayağa kaldırmak gibi.

Bu komutların yanına projemizde bulunan uygulamaların ihtiyaçlarını karşılayacak veya yönetimsel yeni komutlarda ekleyebiliriz. Bu yazıda bu komutları nasıl oluşturup, kullanabileceğimizi göreceğiz. Hazırsanız başlayalım 🙂


Giriş olarak önce temel bir Django projesinde tanımlı tüm komutlara bir göz atalım.

Zaten aşina olduğunuz bir kaç komut dikkatinizi çekmiştir. Fakat burada dikkat etmemiz gereken nokta komutların ya genel Django iskeletinde ya da bir uygulama altında yaşaması.

Django komutları ararken veya çalıştırırken uygulamalar altındaki management/commands klasörünü tarar ve bulunan komutu çalıştırır. Aynı templates klasör yapısı gibi. Django bu klasör dışındaki komutları tanımayacaktır. Tekrar kullanılabilir veya yardımcı 3.parti bir uygulama yazmak istediğiniz zaman karışıklıkların önüne geçmek için sizi bu yapı içinde tutar. Devam edelim.

Şu görünümde bir demo projemiz olsun.

Şu haliyle tanımlanmış fakat çalıştırılamayacak bir komutumuz var.

Basit bir komut yazmak.

Basitçe uygulamanın lokal tarihi bilgisini gösteren bir komut yazıp, çalıştıralım ve adım adım üstünden geçerek anlamaya çalışalım.

Django yönetim komutları aslında BaseCommand sınfından türetilen Command adına sahip sınıflardır. Komutun yapacağı ana işlem(bu örnekte lokal tarihin belirlenmesi) handle metodunda tanımlanır. Komut çalıştırıldığında metod varsa parametreler ile birlikte yürütülür. Oluşturulan sonuç standart outputa yazılır(opsiyonel).

Not. Her bir komut uygulama altında farklı bir dosyada ve mutlaka Command isimli bir sınıf tanımlanarak oluşturulmadır. Aksi halde Django size komutu bulamadığını söylecektir. Komutun ismi dosya ismi olacaktır.

Aslında komutlar sıradan bir Python scriptinden farklı gözükmüyor bu yüzden neden böyle bir kullanıma ihtiyaç duyduğumuzu düşünebilirsiniz. Evet bir bakıma haklı bir düşünce. Fakat komutlar sıradan Python scriptinden farklı olarak uygulamanızın tüm parçaları ile iletişime geçebilir. Örneğin veritabanı sorgularınızı veya diğer yardımcı fonksiyonlarınızı kullanabilirsiniz. Tüm komponentler içeriye aktarılabilir ve kullanılabilir durumdadır.


Parametreler ile çalışmak.

Mantığı kavradık fakat şu an elimizde olan komut pek yetenekli değil. Komutlarla birlikte kullanılması için zorunlu veya opsiyonel parametrelerin kullanımı için 2 adet yeni komut oluşturacağız ve üzerine konuşacağız.

  • Birinci komut bizim için belirlediğimiz sayıda  rastgele yetkili veya normal kullanıcılar oluşturacak.
  • İkinci komut ise kayıt edilmiş son 10 kullanıcının tamamını ya da yetkili sıfatına sahip olanlarını geri dönecek.

Zorunlu parametreler.

your_app/management/commands/create_users.py

Django komutlar ile birlikte kullanılacak olan parametreleri yönetmek için standart bir Python kütüphanesi olan argparse kütüphanesini kullanır ve standart inputtan okuduğu değerleri komutlara geçirir.

total parametresi zorunlu ve kaç adet kullanıcı oluşturalacağını belirleyen parametre. Çalıştırır isek:


Opsiyonel parametreler.

Opsiyonel parametreler ile komutların çalışmasına müdahale edebiliriz. Herhangi bir değer sağlanmadığında değişken None dönecektir.

Bu örnekte dışarıdan alınan prefix parametresi oluşturulacak kullanıcı adının ön eki olarak eklenmekte.


Opsiyonel flag parametreler.

Bir diğer opsiyonel parametre tipi olan flag’leri ile de komutlarımızı çalıştırabiliriz. Flagler genellikle boolean değerleri komutlara geçirmek için kullanılır. Örneğin yukarıdaki komuta flag –staff flagi ekleyerek oluşturulacak tüm kullanıcıların yetkili tipinde olmasını belirtebiliriz.

Fakat biz bu kullanımı görme adına, yeni bir komut yazacağız. Bu komut varsayılan olarak kaydedilmiş son 10 kullanıcıyı dönecek. Ama –staff parametresi geçilir ise son 10 kullanıcı arasında bulunan yetkili hesapları dönecek.


your_app/management/commands/get_last_users.py

–staff  flagi komuta parametre olarak geçirilmez ise varsayılan olarak False değerine sahip olur.

Not. Belki dikkatinizi çekti belki çekmedi fakat Django komutlarınızı uygulamanız genelinde herhangi bir yerde çalıştırabilirsiniz. Örneğin uygulamanızın çıktı oluşturan bir komutu var ve test yazarken bu çıktıyı kullanmak zorundasınız. call_command yardımı ile dinamik olarak çıktıyı üretip testinizi kurgulamaya devam edebilirsiniz.

Yukarıdaki not bağlamında komutumuzu çalıştırdığımız da ilk önce 10 kullanıcı oluşturuyor ve daha sonra filtreleme işlemlerini gerçekleştiriyoruz.


Ek bilgi olarak:

Komplike komutlar yazdığınızda ayırt edilmeyi kolaylaştırması adına çıktılarınızı stillendirebilirsiniz.

your_app/management/commands/colors.py

 

django command available style colors

Son sözler.

Uzun ve keyifli bir yazı oldu. Artık Django yönetim komutları hakkında giriş seviyesinde dahi olsa bilgi sahibisiniz. Fakat daha komplike işlemler için başucu kaynaklarına göz atmakta her zaman fayda var. Görüşmek üzere!

İlgili Django dökümantasyonu.

Python argparse dökümantasyonu.

 

 

Tarih:Blog

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Göster
Gizle