Python (eski yazılar, sayfa 2)

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…

HTMLParser ve urllib ile Web Sayfalarından Bilgi Almak

Bu yazıda, python kullanarak, internet sayfalarını okumak ve bu sayfalardan ilgilendiğimiz bilgileri toplamakla alakalı küçük bir örnek yapacağım. Örneğimizde, internetten bir html belgesi alacak ve bu html belgesindeki javascript'leri bir listeye toplayacağız.

Eğer daha önce bu konuda bir uğraşınız olmuşsa, neden SGMLLib değil de, HTMLParser kullandığımı merak edebilirsiniz. Bunun nedeni, python 3 ile birlikte, SGMLLib'in standard python modülleri içerisinden çıkarılması. HTMLParser modülü de html.parser modülüne taşındı, ancak o sorunu şu şekilde halledeceğim:

Devamını oku…

Django Modelleriyle Paket Yöneticisi

Birçok web uygulama ve python geliştiricisi, Django'nun harika bir web çatısı olduğunu düşünür. Ancak, Django'yu bir web çatısı olmakla sınırlandırmak, bence biraz haksızlık olur. Django'nun parçalarının mümkün olduğu kadar birbirinden bağımsız olmasından dolayı, kolaylıkla istediğiniz parçasını, kendi uygulamalarınıza dahil edebilirsiniz. Django'nun kişisel olarak en sevdiğim yanı veritabanı API'si olduğu için, Django'nun veritabanı geliştirme arayüzünü nasıl kendi projemize dahil edebileceğimizi göstermek için, küçük bir örnek yapmak istedim.

Devamını oku…

If..Else yada Try..Except, hangisi ne zaman kullanılmalı?

Python öğrenen geliştiriciler, birkaç basit ders ardından try...except yapısıyla hata yakalama ve kurtarma yapmayı öğrenir. Bunu gerekli yerlerde kullanabilecek bilgi ve deneyim seviyesine kısa sürede erişebilir. Ancak, try..except yapısının daha egzotik kullanımları da mümkün. Try..except yapısıyla daha okunaklı ve temiz kod yazılabilir mi, yada ne zaman bu yapıyı kullanmaktan kaçınmalıdır sorusuna değinmek istedim. Birazdan okuyacaklarınız, benim bu konudaki kişisel görüşlerimdir. Kanıtlanmış veya toplumca kabul görmüş gerçekler olabilir veya olmayabilir.

Devamını oku…

Django ve Url Düzeltme

Internet tarayıcısına elle url girenler, url'leri yanlış yazmalarından dolayı gördükleri 404 sayfalarını hatırlayacaktır. Bu 404 sayfaları sinir bozucudur. Özellikle de ziyaretçiye kolaylık sağlayan bir özellikleri yoksa. 404 sayfaları, ziyaretçiye site haritası sunarak, ya da ziyaretçiye bazı önerilerde bulunarak ziyaretçiye kolaylık sağlayabilir. Ancak, 404 sayfasını atlayıp, ziyaretçiyi gerçekten gitmek istediği sayfaya yönlendirmek en doğrusu olacaktır.

Devamını oku…

5 Django İpucu

Başlangıç seviyesindeki anlatımlarda çok sık karşılaşamayacağınız, ancak, Django ile uygulama geliştirirken işinize yarayacak 5 ipucunu sizlerle paylaşmak istedim.

Devamını oku…

Django sunucusu olarak dotcloud

Son zamanlarda bilişim çevrelerinde sık sık duyabileceğiniz "cloud computing" teriminin henüz oturmuş bir sözlük anlamı yok. En sık kullanılan anlamında "cloud computing" bir bilgisayarın kaynaklarının çoğunlukla sanallaştırma yazılımlarıyla birlikte, birden fazla kişi tarafından bölüşülmesi demek. Bu hizmeti sağlayan "dotcloud" firmasının, django uygulamalarını destekleyen bir altyapısı var ve belirli sınırlamalar çerçevesinde bu hizmeti ücretsiz alabiliyorsunuz.

Devamını oku…