Django'da Sınıf Temelli Genel Görünümler

Django'da geliştirirken, ister istemez genel görünümlere dokunuyoruz. Son günlerde, django gezegeninde ve mail gruplarında, sınıf temelli görünümlerden bahsedildiğini gördüm, ancak, bunların nasıl kullanılacağı hakkındaki bilgim yok denecek kadar azdı. Bu yüzden, Django belgelerine biraz göz attım, ve etkin kullanıldığında, sınıf temelli görünümlerin, çok verimli olabileceği kanısına vardım. Şimdilik yüzeysel olarak, örnekler ve kısa açıklamalar yazmak istedim, kendimi bu konuda geliştirirsem, ileride daha derin olarak inceleyebilirim bunları.

Devamını oku…

Python ve Google Api ile Url Kısaltma

Url kısaltmak için google kullanmak bana kolay geliyor. Çünkü, temel işlemler için, api anahtarına ihtiyaç yok. Tek yapmanız gereken, kısaltmak istediğiniz url'i json formatında, post metoduyla https://www.googleapis.com/urlshortener/v1/url adresine göndermeniz. Python ile bunu nasıl yapılacağına ait aşağıda bir örnek var. İhtiyaca göre düzenlenip, kullanılabilir.

İlk iş, urllib2 ve json modüllerini içe aktarmak. Bu araçlar olmazsa, http isteği göndermek ve aldığımız cevabı kullanabileceğimiz bir python değişkenine dönüştürmek, oldukça güç olur.

Devamını oku…

Python'da Hız Ölçme: profile Modülü

Python'da hız ölçmek için profile veya cprofile modülleri kullanılabilir. Bu modüllerin arasındaki fark, ilkinin saf python ile diğerinin ise C ile uygulanmış olmasıdır. Performans açısından, cprofile modülü daha verimlidir. profile modülü, cprofile modülüne göre yavaş kalır, ancak, saf python ile yazıldığından dolayı, genişletmeye daha müsaittir. Bir de, bazı platformlarda, cprofile modülü bulunmayabilir.

Devamını oku…

Python'da str Objesini Genişletmek

Python'da str ve unicode gibi objelerin alt sınıflarını oluşturmak istediğinizde, biraz sıkıntıya düşebilirsiniz. Bunlar, yerinde değiştirilemeyen nesneler olduğu için, bunların metotlarını kullanmak, kendi objenizin kaybolmasına neden olur. Bu problemin önüne geçmek için, __getattribute__() metodunun üzerine yazabilirsiniz. Aşağıdaki örnekte, çoğul eki, iyelik eki ve ismin hallerini bulan bununla birlikte, bir unicode objesinin de tüm metotlarına erişebilen bir sınıf tanımlayacağız.

Devamını oku…

Python Hakkında Birkaç Soruya Cevap

Bir arkadaşımın Python hakkındaki birkaç sorusu üzerine, bu soruları blog'umdan cevaplamayı ve aynı soruların cevaplarını arayan diğer arkadaşlarla da paylaşmış olmayı istedim.

Sorulara ve cevaplara geçmeden önce, şunu belirtmek istiyorum, python öğrenmeye başlamış eski bir C veya Java geliştiricisiyseniz, bu geçmişiniz Python öğrenmeniz açısından talihsiz bir durum. Python öğrenmeden önce, C, Java, Php gibi diğer dilleri kullanmış geliştiriciler, bu dillerdeki alışkanlıklarını Python'a taşımaya meyillidir. Ancak, Python'un iş yapış şekli, kendine özgüdür. Bu yüzden, Python öğrenmeye başlarken, daha önce programlama ile öğrendiğiniz herşeyi gözardı etmeye çalışın, ve Python felsefesini öğrenmeye çalışın. Bu konuda anlaştıysak, soru-cevap bölümüne geçebiliriz.

Devamını oku…

Django'da Aggregate ve Annotate

Django veritabanı yönetiminde annotate() ve aggregate() kullanarak,satırların toplamı, ortalaması gibi, veritabanında birden çok satırdan veya ilgili diğer tablolardan bilgi toplayarak bulunması gereken değerleri bulabilirsiniz. annotate() ve aggregate() metodlarının farkı, aggregate'in tüm tablo için tek bir sonuç döndürmesi, annotate'in ise veritabanındaki tüm satırlar için ayrı birer değer oluşturmasıdır. Bu yazıda kısaca Django'da annotate ve aggreate kullanımı ile ilgili örnekler göstereceğim.

Burada anlatılanlar kısaca django'da annotate ve aggregate nasıl kullanılır konusuna giriş yapmak içindir, daha fazlasını django belgelerinde aggregate ile ilgili bölümden bulabilirsiniz.

Devamını oku…

Python 2.x ve 3.x Arasındaki Bazı Farklılıklar

Python 2'den 3'e geçiş aşamasında, el altında bulundurmak için, en sık ihtiyaç duyulacağını düşündüğüm farklılıklar, ve 2'den 3'e geçme ipuçlarının bir listesinden oluşan kısa bir rehber oluşturma ihtiyacı hissettim. Benim gibi bu aşamada el altında bir geçiş rehberi bulundurmak isteyenlerle de paylaşmış olmak için, blogumdan yazayım dedim. Eksikleri farkettikçe buraya ekleyeceğim.

Bilgilerin kaynakları (Şimdilik tek kaynak): Python Belgeleri

Not: Eğer python öğrenmeye başlayacaksanız, ve hangi sürümden başlayacağınıza karar vermeye çalışıyorsanız, bu rehberin size pek bir faydası olmayacaktır. Python 2.6 veya 2.7 ile öğrenmeye başlayın. Ancak, kodlarınızı çalıştırırken python yorumlayıcısını "-3" anahtarıyla başlatın. Böylece, python 3'de değişen özelliklerle ilgili bilgi alabilirsiniz.

Devamını oku…

Django'da Tembel Reverse

Django'da reverse(), argüman olarak verdiğiniz görünüm fonksiyonuna giden url'i bulur, ve bu url'i bir karakter dizisi olarak döndürür. Ancak bazı durumlarda, bu fonksiyonu kullanamazsınız. Örneğin, url bilgilerini tutan modüle dahil ettiğiniz modüllerde bunu kullandığınızda sıkıntı çıkaracaktır. Çünkü bu fonksiyonu kullandığınızda, url bilgilerinin zaten yüklenmiş olması gerekir.

Devamını oku…

Python'da Birim Testi ve Test Temelli Geliştirme

Yazılım geliştirmede birim testi, kısaca, yazılımı oluşturan birimlerin belirlenen girdiler ve beklenen çıktılar kullanılarak, programatik olarak test edilmesidir. Birim ile kastedilen olgu bahsi geçen konuya göre değişebilse de, genelde, bir programı oluşturan en küçük parçadır. Test temelli geliştirme ise, birimi geliştirmeye başlamadan önce, bu birimden beklenenlerin belirlenip, beklentiye uygun testler yazılmasıdır. Daha sonra, tüm testler başarılı oluncaya kadar birimin geliştirilmesine devam edilir.

Birim testlerinin ve test temelli yazılım geliştirmenin birkaç avantajı vardır. dive into python'da bu avantajları çok iyi anlatmış, orayı çevirmekle yetineceğim:

  • Kod yazmadan önce, sizi gereksinimlerinizi faydalı bir şekilde detaylandırmaya zorlar.
  • Kod yazarken, sizi gereksiz kod yazmaktan kurtarır. Tüm testler başarılıysa, kod yeterli demektir.
  • Kodları yenilerken, yeni sürümün eskisi gibi davrandığından emin olmanızı sağlar. (Benim en sevdiğim özellik!)
  • Kodların bakımını yaparken, son yaptığınız değişiklik eski kodu bozdu diye size bozuk atanlara karşı kendinizi savunmanızı sağlar.("Ama birim testleri başarılı oldu...")
  • Bir ekip çalışması yapıyorsanız, kodlarınızın diğer geliştiricilerin kodlarını bozmadığından emin olmanızı sağlar. Değişikliklerinizi onaylayıp, ortak depolara yollamadan önce diğer geliştiricilerin testlerini uygulayabilirsiniz.

Python'da birim testi yapmak için, unittest modülü kullanılır. Testler unittest modülündeki TestCase sınıfının bir alt sınıfında yazılır. Bu alt sınıfın, adı test ile başlayan tüm metotları, farklı bir test tanımlar. Bu metotların içerisinde, TestCase sınıfının belirli metotlarıyla, birimin beklenen davranışı sergileyip sergilemediği test edilir.Python Belgelerinin unittest ile ilgili bölümü'nde belirtilen bu metotlar şunlardır:

Devamını oku…