AÖF Soru Bankası

İnternet Tabanlı ProgramlamaÜnite 7 Özeti

Python ve Django

WTK290U-İNTERNET TABANLI PROGRAMLAMA

Ünite 7: Python ve Django

Giriş

Guido Van Rossum isimli bir programcı tarafından 1991 yılında duyurulan Python, açık kaynak kod felsefesi ile geliştirilmiştir. Nesne yönelimli, yorumlamalı, modüler ve etkileşimli yüksek seviyeli bir programlama dili olarak tanımlanmaktadır. Bu programlama dilinin üstünlükleri şu şekilde sıralanabilir:

• Açık kaynak kodlu ve ücretsiz bir dil olması, • Yorumlanan ve dinamik bir dil olması, • Etkileşimli bir dil olması • Söz diziminin sade ve okunabilirliğinin kolay olması, • Modüler bir yapıya sahip olması, • Hızlı bir şekilde öğrenilebilmesi, yeni başlayanlar için uygun olması, • Nesneye yönelik programlama dili olması ama bunu mecbur tutmaması, • Öğretici kaynaklarının oldukça fazla olması, • Bilimsel araştırmalarda yaygın olarak kullanılması, • Farklı alanlara özel çok geniş bir kütüphane, modül, paket desteğinin olması, • Gelişmiş bir grafik kütüphanesinin olması, • Farklı işletim sistemleri üzerinde çalışabilmesi • Farklı dillerde yazılmış kodların entegrasyonunu desteklemesi, • Uluslararası saygınlığının olması, • Az kod yazarak çok iş yapmayı desteklemesi, • 3.x serisinden itibaren UTF-8 desteğinin olması

Python Programlama Dili

Python dili ile programlama yapabilmek için program dilinin bilgisayara kurulması gerekir. Kurulum için öncelikle, http://www.python.org/downloads adresinden kurulum dosyalarının indirilmesi gerekmektedir. Kurulumun sorunsuz olabilmesi için işletim sistemi güncel olmalıdır.

Python Programlama Dilinde Değişkenler

Python programlama dili yaklaşık 30 adet saklı sözcük barındırmaktadır. Saklı sözcükler şunlardır: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield. Değişken isimlerini verirken bu saklı kelimeleri ve kütüphanelerde yer alan fonksiyon isimleri kullanılmaz. Bunun dışında da bazı kurallar bulunmaktadır. Bu kurallardan bazıları programlama ortamları tarafından bize dikte edilirken, bazıları da genel tavsiye niteliğindedir. Değişken isimleri bir harf veya “_” ile başlamalıdır. Değişken isimlerinde boşluk kullanılmaz. Değişken adı birden fazla kelimeden oluşuyorsa kelime geçişlerinde büyük harf veya _ kullanılabilir. Örneğin degisken_adi veya degiskenAdi gibi. Değişken isimlerini seçerken anlaşılabilir yorumlanabilir isimler seçmekte yarar bulunmaktadır. Değişken ataması “=” işareti ile

yapılmaktadır. Aynı değere sahip birden fazla değişken aynı satırda tanımlanabilir.

Python Veri Tipleri

Python programlama dilinde değişken tanımlamada tip belirtmeye gerek yoktur. Python ilk atama yapıldığı anda değişkenin tipini otomatik olarak belirlemektedir. Python ile kullanacağımız veri tipleri, integer, float, long integer, boolean, complex, string, list, dictionary ve tuples olarak sıralanabilir. Ayrıca Python’da fonksiyonlar, lambdalar, nesneler, dosya tanıtıcıları gibi topluluklar da veri tipi olarak kabul edilirler.

Integer: Tamsayıları saklamak için kullanılmaktadır. 32 bit genişliğindedir. ± 2147483647 sayı aralığında değer alabilirler.

Long Integer: Daha büyük tam sayılar için kullanılmaktadır. 64 bit genişliğindedir.

Float: Ondalık sayıları saklamak için kullanılmaktadır. Örneğin, 3.54 veya 7.8e-28 gibi

Complex sayılar: Matematikte sıkça kullanılan karmaşık sayıların tanımlanmasında kullanılmaktadır. Gerçek ve sanal sayılardan oluşur. Sanal sayılar j veya J soneki ile belirtilir. 5+4j veya 1.35+0.003j gibi.

Boolean: Doğru ve yanlış mantıksal değerleri saklamak için kullanılır. İki boolean değer vardır: ‘True’ ve ‘False’.

String: Karakter katarlarını tanımlamak için kullanılır. “ veya ‘ işaretleri arasında tanımlanır. Eğer metin içerisinde “karakteri kullanılmak istenirse kaçış karakteri (\) ile birlikte kullanılmalıdır. String tipindeki iki değişkeni yan yana birleştirme işlemi (Concatenate) toplama operatörü ile gerçekleştirilmektedir.

List: Ardışık verilerin tutulduğu listeler olarak tanımlanabilir. Diğer dillerdeki dizi değişkenlerin Python’daki karşılığıdır. Liste elemanları köşeli parantez kullanılarak aralarında virgül ile tanımlanır. Liste elemanına ulaşmak için indis (anahtar) kullanılmaktadır.

Bunlar dışında;

• .index(): Bir öğenin indisini öğrenmek için, • .sort(): Listemizdeki öğeleri alfabe sıralamak için, • .reverse(): sırayı ters çevirmek için • .count(): listedeki eleman sayısını öğrenmek için

fonksiyonları kullanılabilir.

Tuples: Tüpler içeriği değiştirilmeyen listeler olarak tanımlanabilir. Elemanları ( ve ) karakterleri içerisinde virgülle ayrılarak tanımlanır.

Dictionary: Bu veri tipide listeye benzemektedir. Fakat dictionary (sözlük) veri tipinde elemanlar (anahtar, değer) ikilileri şeklinde tanımlanırlar. Anahtar ve değer için istenilen veri tipi kullanılabilir. Değere ulaşmak için daha önce belirtilen anahtar kullanılmaktadır. Elemanları { ve } karakterleri arasında anahtar:değer sözdizimi ile virgül ile


ayrılarak tanımlanır. Sözlükten veri silmek istediğimizde ise “del” fonksiyonunu kullanabiliriz.

Sözlük veri tipinde de kullanabileceğimiz başka metotlar bulunmaktadır. Bunlar:

• .clear(): Sözlüğün tüm elemanlarını siler. Kullanımı: liste.clear() • .keys(): Sözlüğün sadece anahtarlarını almamızı sağlar. Kullanımı: liste.keys() • .values(): Sözlüğün sadece değerlerini almamızı sağlar. Kullanımı: liste.values() • .items(): Sözlüğün anahtarlarını ve değerlerini almamızı sağlar. Özellikle for döngülerinde oldukça işimize yarayacak bir metottur. Kullanımı: liste.items() • .get(): Eğer yazılan anahtar varsa onun değerini getirirken, anahtar arrayde bulunmaz ise ikinci parametreyi döndürmektedir. Kullanımı: ogrenciler.get(155, “aradığınız öğrenci yok.”) • .copy(): Sözlüğü kopyalamak için kullanılır. Kullanımı: yedek_ogrenciler = ogrenciler. copy() • .pop(): listelerde olduğu gibi verilen anahtarı listeden silme işlevine sahiptir. Kullanımı ogrenciler.pop(155) • .setdefault(): Yeni anahtar ve değer ikilisi eklemek için kullanılır. Eklenmek istenen ikili sözlükte mevcut ise ekleme işlemini gerçekleştirmez. Kullanımı: ogrenciler.setdefault(175, “onur”)

None Nesnesi: Var olmayan değerleri ifade etmekte kullanılır. Diğer dillerde yer alan “null ve nil” ifadelerinin pythondaki karşılığıdır.

Python Programlama Dilinde Operatörler

Programlama dilinde operatörler atama, aritmetik ve karşılaştırma operatörleri olarak farklı kategoriler altında sınıflandırılmışlardır:

Atama Operatörleri: Python’da diğer diller dillerde olduğu gibi atama operatörü “=” dir. Bu operatör dışında birleşik atama operatörleri de bulunmaktadır: +=, -=, /=, *=, %=, **=, //=

Aritmetik Operatörler: Genel olarak matematiksel işlemleri gerçekleştirmemizi sağlamaktadırlar. Bu operatörler: + (toplama), - (çıkarma), * (çarpma), / (bölme), ** (kuvvet), % (modülüs), // (taban bölme) şeklinde sıralanabilir.

Karşılaştırma Operatörleri: İki veri arasında karşılaştırma ilişkisi kuran operatörler, karşılaştırma operatörleri olarak adlandırılmaktadır. Bunlar; == (eşitlik), != (eşit değil), > (büyüktür), < (küçüktür), >= (büyük eşit), <= (küçük eşit) olarak sıralanabilir. Python’da kullanılan bir başka karşılaştırma operatörü de “is” kelimesidir. Bu kelime genellikle == ile karıştırılmaktadır. “is” operatörü nesneler arasında karşılaştırma yapılırken kullanılmaktadır. “in” operatörü bir sayının veya karakter katarının, herhangi bir veri tipi içinde olup olmadığını sorgulamaktadır.

Python Programlama Dilinde Hazır Fonksiyonlar

print() Fonksiyonu: Tüm dillerde ilk öğrenilen fonksiyonlardan olan print fonksiyonu, istediğimiz verinin ekrana basılmasını sağlamaktadır.

input() Fonksiyonu: Konsol ekranında kullanıcıdan veri almak için kullanılan fonksiyondur. Bu fonksiyon sayesinde kullanıcıdan gelen veri istenen bir değişkene atanabilir.

Dönüştürücü Fonksiyonlar: Verinin tipini değiştiren fonksiyonlar olarak tanımlanmaktadır. Python dilinde var olan dönüştürücü fonksiyonların bazıları şu şekilde sıralanabilir:

• int(x): veriyi tam sayıya dönüştürür. • long(x): veriyi uzun tam sayı ifadeye dönüştürür. • float(x): veriyi ondalıklı sayıya dönüştürür. • complex(x): veriyi karmaşık sayıya dönüştür. • str(x): veriyi string ifadeye dönüştürür. • tuple(s): veriyi/leri tuple veri tipine dönüştürür. • list(s): veriyi list veri tipine dönüştürür. • set(s): String ifadeyi set eder. • dict(d): veriyi sözlük oluşturur. • chr(x): bir tamsayıyı karaktere dönüştürür. • unichr(x): bir tamsayıyı unicode olarak karaktere dönüştürür. • ord(x): bir karakterin ASCII kodunu verir. • hex(x): tam sayıyı hexadecmal bir sayıya dönüştürür. • oct(x): tam sayıyı octale dönüştürür.

abs() fonksiyonu parametre olarak girilen sayının mutlak değerini döndürmektedir.

len() Fonksiyonu: Parametre olarak girilen karakter kadarının eleman sayısını veya girilen dizi tipi verilerin (tuple, list, dictionary vb.) eleman sayısını döndürmektedir.

pow() Fonksiyonu: Bu fonksiyona parametre olarak 2 veya 3 veri girilebilmektedir. Eğer iki parametre girilirse pow(x,y)=xy, eğer 3 parametre girilirse pow(x,y,z)= xy%z şeklinde değer döndürmektedir.

round() Fonksiyonu: Bu fonksiyon parametre olarak 1 veya 2 veri almaktadır. Eğer tek parametre ile çalışırsa girilen sayıyı en yakın tam sayıya yuvarlamaktadır. İkinci parametre (eğer girilirse) virgülden sonra yuvarlanacak basamak sayısını göstermektedir.

Python Program Denetimi

Program denetimi, şartlara ve girdilere bağlı olarak program akışını düzenleme işidir. Program denetimi öğelerinin kullanımını bilmeden kodlama yapmak söz konusu değildir. Akış denetimi ve döngüler bir programcının bilmesi gereken temel unsurlardır. Python da diğer diller gibi, if, else, elif gibi kontrol yapılarına, for, while gibi döngü yapılarına, pass, break, continue gibi döngü çıkış elemanlarına sahiptir.


Python Modüller ve Paketler

Modül, birtakım fonksiyonları ve nitelikleri barındıran araçlar olarak tanımlanabilir. Python’ da yer alan yararlı modül ve paket listesi şu şekilde listelenebilir.

• Kivy: Mobil cihazlara program yazabilmek için geliştirilmiş bir pakettir. Kivy’i kullanarak yazılan programlar tüm platformlarda çalışabilmektedir. Temel olarak PyGame paketi üzerine kurulmuş bir yapıdır. • Pygame: Python’ı kullanarak platform bağımsız olarak oyun ve çokluortam uygulamaları geliştirmemizi sağlayan bir kütüphanedir. SDL kütüphanesi üzerine kurulmuştur. SDL (Simple DirectMedia Layer) C programlama dili ile yazılmış grafik, ses, klavye ve mouse etkileşimi sunan bir kütüphanedir. • PIL (Python Imaging Library): PIL, Kullanıcısına grafik işleme için birçok hazır nesne ve metot sunar. Birçok grafik türünü açıp çizim, düzenleme, filitreleme benzeri işlemleri yapmamıza olanak verir. • NumPy: Sayısal (Numerical) python’un kısaltılmış halidir. Özellikle veri odaklı çalışan programcılar için önemli nesne ve metotları içerir. Çok boyutlu dizi/vektör/matris hesaplamaları için özelleşmiş, bunlar üzerinde çok hızlı işlem yapılabilen nesnelere ve metotlara sahiptir. Ayrıca lineer matematik işlemlerini de desteklemektedir. • SciPy: Matematiksel fonksiyonları ve farklı bilim dallarındaki (fizik, kimya, biyoloji vb.) problemlerin çözümü için gerekli hazır fonksiyonları içerir. Scipy kütüphanesi, Numpy dizilerini kullanmaktadır. • Pandas: Veri yapılarını sık kullanan bireyler için uygun bir pakettir. Excel ve SQL verilerini kolaylıkla işleyebilir. Finansal işlemleri yüksek performans ile destekleyen çok sayına nesne ve metot barındırır. • Matplotlib: Verileri görselleştirmede kullanılan önemli bir pakettir. NumPy paketi ile uyumlu bir şekilde çalışabilir. Bu iki paket ile MATLAB programının kapasitesine yakın bir kapasite yakalanabilir. • Polyglot: Doğal dil işleme alanında çalışanların kullanabileceği temel fonksiyonları birçok dil için destekleyen bir pakettir. • PyQtGraph: 2 ve 3 boyutlu grafikler oluşturmak, matematiksel, bilimsel ve mühendislik yazılımları için gerekli işlevleri içeren, PyQt, NumPy, SciPy ve PyOpenGL kütüphanelerinden yararlanan grafik ve GUI (Graphical User Interface/ grafiksel kullanıcı arayüzü) kütüphanesidir. • PySonic: Platform bağısız ses kütüphanesidir. • SQLAlchemy: Python için bir veritabanı erişim kütüphanesidir.

• MySQLdb: Python ile MySQL veritabanını kullanmak için tasarlanmış Python modülüdür. • PyQT: Programcılara, GUI oluşturma için gerekli altyapıyı sunan bir kütüphanedir. PyQT platform bağımsız bir kütüphanedir. Dünya çapında birçok firmanın yazılım geliştirme için seçtiği kütüphanedir. • PyGtk: Tıpkı PyQt gibi, kullanıcılara GUI arabirimleri oluşturmamıza imkân veren bir kütüphanedir. Platform bağımsız olarak uygulama geliştirilebilir. GTK+ kütüphanesini kullanır. • Tkinter: GUI uygulamaları geliştirmek için tasarlanmış bir kütüphanedir. • WxPython: Bir başka platform bağımsız GUI uygulamaları geliştirmek için kullanabileceğimiz kütüphane. • Scapy: Network programlama için gerekli yapıları içeren python kütüphanesidir. • PyQuery: XML belgeleri üzerinde Jquery sorgularının gerçekleştirmemizi sağlayan kütüphanedir. • Web2Py: Python dilinde geliştirilmiş web uygulaması çatısıdır. Web2Py, web sayfası geliştiricilerine dinamik web içeriklerini kolayca oluşturmaları için gerekli alt yapıyı sunmaktadır. • Django: Tıpkı web2Py gibi bir web uygulama çatısıdır. MTV (Model-View-Template) mimarisini destekleyen Django’nun temel amacı genelde karmaşık bir yapıya sahip veritabanı kullanabilen web sayfalarını hızlıca tasarlanmasıdır.

Python ile Nesneye Yönelik Programlama

Python içerisinde yer alan tüm kütüphaneler nesneye yönelik programlama felsefesi ile yazılmıştır. Sınıf, nesnelerin özelliklerini, davranışlarını ve başlangıç durumlarını tanımlamak için kullanılan şablonlar olarak tanımlanırken, nesneler ise sınıflardan türetilmiş örnekler olarak tanımlanabilir. Nesneye yönelik yaklaşımda, kodlar nesne veya sınıf üzerinden çağırılacak metotlar içerisine yazılır ve bunlar üzerinden tetiklenir. Buna ek olarak, tanımlanan sınıflar, metotlar ve değişkenler için bir erişim belirleyicisi tanımlanabilir. Python’da erişim belirleyicileri; public, private ve semi-private’dır. Nesne Yönelimli Programlama dillerindeki en temel prensiplerinden olan Miras kavramı da Python tarafından desteklenmektedir. Miras kavramı, bir sınıfın özelliklerinin ve metotlarının başka sınıflara aktarılmasına dayanmaktadır. Bu şekilde birbirlerine kodsal açıdan benzeyen sınıfları tek tek yazmak yerine, ortak noktaları belirlenerek temel bir sınıf (base class) oluşturulur. Daha sonra ise temel sınıfın ortak özellikleri üzerine yeni özellikler metotlar eklenerek türetilmiş sınıflar (derived class) oluşturulmaktadır.

Django Web Çatısı

Django, Python programlama diliyle yazılmış bir web sayfası geliştirme çatısıdır (web framework). Çatı, hızlı, güvenilir, modüler ve sağlam bir kodlama yapabilmemiz


için kullanılan altyapı olarak tanımlanabilir. Django kurulumun ilk adımı Python kurulumudur. Django kurulumu için herhangi bir görsel arayüz bulunmamaktadır. Kurulum, komut istemcisi üzerinden gerçekleştirilmektedir.

Şablonlar, web sayfalarında tasarım ile kodu ayırmamızı sağlayan yapılardır. Şablonlar yardımı ile tasarımda veya kodda yapılacak bir değişiklik diğerini etkilememesi sağlanabilir. Bu, işlemleri paralel olarak gerçekleştirmeye yardımcı olur.

Django Modeller

Günümüzde web sitelerinin birçoğu en az bir veritabanı kullanmaktadır. Django bir web sitesinin veritabanını gereksinimini karşılamak için gerekli tüm yapılara sahiptir. Sağladığı fonksiyonlar sayesinde, veritabanı kullanırken SQL komutlarını bilmeye gerek kalmaz.

Django’da modelleri tanımlayarak ve kullanarak, veri listeleme, veri ekleme, farklı filtreler uygulayarak veri seçme, veri güncelleme ve veri silme işlemleri kolaylıkla gerçekleştirilebilir.

Veritabanı sistemlerinde belki de en fazla kullanılan işlem veri seçme işlemidir. Veritabanı ile çalışan programlar genelde verilerin arasından belli kriterlere uygun kayıtlar üzerinde işlemler gerçekleştirirler. Tabloda yer alan tüm verilerin seçilmesi için all() metodu kullanılırken, filtreleyerek veri seçme işlemi için “filter()” metodu kullanılır. “filter()” metodu sonuç olarak bir sorgu seti geri döndürmektedir. Eğer tek bir kayıt çekilmek isteniyorsa “get()” metodu kullanılmalıdır. Veri güncelleme işlemi kaydetme işlemi ile benzerlik göstermektedir. Veri silme işlemi için “delete()” metodu kullanılmaktadır.

Bu ünitenin sorularını uygulamada çözŞıklar, doğru cevaplar ve süreli sınav modu AÖF Soru Bankası uygulamasında