Bu belgede basit ve örnekli hatta diğer web ******ing dilleriyle karşılaştırmalı (array,include gibi) olarak önemli komut,değişken ve nesnelerin Python mantığına ve doğasına göre nasıl olması gerektiği anlatılmaktadır. Bu belgeye son hali verilmeden önce referans belgenin tamamlanması ile cgi tarzı çalışma dışında Python ile Php ve ASP tarzında html içine gömülü sunucu tarafından sunulan (server pages) konusunda da önemli bilgiler bulabileceksiniz. Ayrıca dünaydaki en güçlü açık kaynak kodlu veritabanı motoru olan PostgreSQL ile bağlantılar konusuda işlenecektir.
Bu belge okunurken dikkat edilmesi gerekenler iki '-' işareti içinde verilenler kodlar ve ekran çıktılarıdır ve bunlar birebir denenmişlerdir. Görsel tarayıcı yerine çıktılarda Python yorumlayıcı çıktısına ve bazı durumlarda lynx programi ekran çıktılarına başvurulmuştur.
#!/usr/bin/python
print"*******-type: text/html\n"
print"Merhaba"
Bu program ilk.py adıyla cgi dizinine kaydedilmesi ve ile çağırılması ile ekrana
Merhaba
yazılır.
Python, Gelecek Linux veya başka bir linux kullanıyor iseniz bunlar zaten sisteminize kurulu gelecektir. Bir terminalde komut satırında python yazdığınızda python yorumlayıcısı çalışacaktır:
[root@localhost /root]# python
Python 1.5.2 (#1, Dec 10 2000, 05:46:36)
[GCC 2.96 20000731 (Gelecek Linux 1.0)] on linux-i386 Copyright 1991-1995
Stichting Mathematisch Centrum, Amsterdam
>>>
Ve Python ile cgi programları yazarken kullanacağımız Python adresi de aksi gösterilmedikçe /usr/bin/python olacaktır. Bu yolun başında gerekli olan shebang yani #! işareti olmalıdır.
Herhangi bir editör yardımıyla yazdınız programları yerel web sunucunuzda çalıştırmak için yazığınız programa bir ad verip .py uzantısı ile /var/www/cgi-bin dizini altina kayıt etmek ve chmod +x ile çalıştırılma hakkı vermek yeterli olacaktır.
Bu açıklamalarda Python'un sadece web tarafı cgi ve gömülü olarak ve onunla ilintili nesneleri anlatılacaktır. Python'a başlangıç, dilin mantığı ile ilgli çok detaylı bilgileri Mustafa BAŞER tarafından hazırlanan python.kolayweb.com adresinde bulabilirsiniz. Programlarınızın içine açıklama satırları eklemek isterseniz satırın başına # işareti koymanız o satırının sonuna kadar dikkate alınmamasını sağlar. Ya da uzunca satıların yorumlanmamasını istediğinizde satırların başına
""" ( üç den den)
ve sonuna
""" koymanız yerinde olur.
Python'da değişkenin tanımlama tipi yoktur. a değişkeni sayı da olabilir, kelime veya harf de. Bu sizin isteğinize kalmıştır.
a=223
b="deneme"
Okunan ve atanan değerler eğer uygun şartlarda ise sayıya veya kelime haline şu şekilde çevrilir: c="123" bir kelime olarak işlenirken ve sadece ekleme yapılır. d="7" int(c)+int(d) ile sonuç matematiksel olarak sonuçlanır:
Bu konular çok detaylı, örnekli ve Türkçe olarak referans belgemizde anlatılmıştır.
Değişkenleri küçük harften büyük harfe veya tam tersine şu şekilde çeviririz:
>>> import string
>>> a="istanbul"
>>> print string.upper(a)
İSTANBUL
>>> print string.lower(a)
istanbul
Değişkenlerin belli bir kısmını yazdırmak için hiçbri komuta başvurmadan sadece Pythonun güzelliğinden yararlanırız:
>>> a="istanbul çok güzeldir"
>>> print a[9:13]
çok
Buradaki ifade a değişkeninden 9 karakterden başlayarak 13 kadar (dahil değil) ekrana basmasını söyler.
Bir değişkeni açıklamalar ile birleştrimek istersek ya " " işaretleriyle ayrık olarak yazıp aralara değişkenin adını yazarız yada daha formatlı bir stil için sadece oraya C gibi dillerde de bulunan %s gibi ifadelerle açıklamayı bozmadan içine gömebiliriz:
>>> a=elma
>>> print "Ben ", a, "yerim."
Ben elma yerim.
Python'da yazılan programın denetimi için diğer dillerde de bulunan if/elif/else, for/else, while/else kalıp karşılaştırma, yürütme ve sonlandırma ifadeleri vardır. Case/switch ifadesi ise doğrudan yoktur. Fakat if/elif/else ile rahatlıkla üretilir. Daha kısa basit bir case/switch özelliği case/switch örneği Pythonun özgü olarak sözlük değişkeni ile (dictionary) şu şekilde üretilir:
Çok boyutlu diziler veya matris tipinde değişken tanımlaması aslında Python'da standart olan liste şeklinde nesneden faydalanılır: Biindiği üzere; dizi=[0,1,2] bir liste tipi değişken tanımlamasıdır. bunu ihtiyaçlarımız doğrultusudna şu şekile getirirsek: cokludizi=[[ali,344],[kemal,887],[mehmet,421]]
0 - 0,1
1 - 0,1
2 - 0,1 şeklinde bir matris oluşturur.
Bu şekilde yazılarak başka dillerdeki array mantığı daha basit bir şekilde elde edilmiş olur. Yine bu matrislere yeni satılar ekleme veya matrisleri birleştirme append() komutu ile yapılır.
Bu matristen kesit almak için ise komut bile kullanmaya gerek yok diğer dillerdekinin aksine sadece kesitin başlagı satırı(dahil) ve sonlanma satırı hariç belirtmek yeterlidir:
Python'da da diğer dillerdeki gibi ve daha da ileri bir şekilde çok kullanılan işlemler için class ve alt bağımlı veya bağımsız fonksiyon tanımlamaları mevcuttur. Bunun için yukarıda adı geçen belgede (python.kolayweb.com) def ve class bölümlerini inceleyiniz.
Python nesne tabanlı bir dil olduğundan direk bir komut olmasa bile işimizi görecek komut dizisi ve nesneyi kolayca ve çok mantıksal bir şekilde oluşturabiliriz.
Örneğin aşağıdaki ek.html isimli dosyayı /var/www/html altına kopyalayıp Python ile yaptığımız cgi programının içine çağırarak ekletelim.
<BODY>
<H1>MERHABA</H1>
<H2B>Bu Python tarafından getirilen ek.html belgesidir</H2>
</BODY>
</HTML>
Bunun çağıran ve kendinden birtakım işlemler yapan a.py isimili dosya aşağıda olup /var/www/cgi-bin/ altına kopyalanmalıdır.
#!/usr/bin/python
print"*******-type: text/html\n"
print open("../html/ek.html").read()
print"Buradan sonra cgi içindeki a.py ile yazılmaktadır."
print"cgi dan gelen yazılar........"
a=3
b=5
print a+b
Bir metin tabanlı tarayıcı olan lynx'deki görüntü şu şekilde olacaktır:
MERHABA
Bu python tarafından getirilen ek.html belgesidir Buradan sonra cgi
içindeki a.py ile yazılmaktadır. cgi dan gelen yazılar........ 8
Burada bir miktar İnternet kısmına giriş yapmış popüler web ******ing dillerinin en çok kullanıldıkları amaçlardan birini vermiş olduk. Şimdi buradan devam edip yine html dosyası içinde yollanan form bilgilerinin alınması ve işlenmesini inceleyelim. Aşağıda q.html isimli bir html dosyası çeşitli form tiplerinde değerleri q.py isimli pyton programına göndermektedir:
http://localhost/q.html'nin çağırılması ile girilen değerlerin Mustafa,2003,diğer checkbox ve radio düğmeleri işaretli ise çıkan sonuç şu şekilde olur:
Okunan 1.değer: Mustafa
Okunan 2.değer: 2003
Okunan 3.değer: şikayet
Okunan 4.değer: düşünce
Python ile dizinler ve dosyalar üstünde işlem yapma şu şekilde olur:
Yeni bir dosya oluşturmak istiyorsanız, open("yenidosya.txt","w") komutunu girmeniz yeterlidir. Daha önceden oluşturlmuş dosyaya bir bilgi yazmak içinde yanı komut dizisi kullanılır. Dosyayı yazmak değilde okumak içi açıyorsak sadece w (write/yaz) harfini r (read/oku) ile değiştirmek yeterlidir. Bir değer yazmak için write(), okumak için ise readline() veya readlines() kullanılır. Şimdi geniş bir örnek vererek tüm nesneleri kulllanalım.
>>> a=open("yenidosya.txt","w")
>>> a.write("denemek için yazılanlar")
>>> a=open("yenidosya.txt","r")
>>> print a.readline()
denemek için yazılanlar
Açtığımız dosyaları koyabileceğimiz dizinlerin oluşabilmesi için dizin de açabilir veya silebiliriz. Bunun için önce os modulunu programa dahil etmek gereklidir.
>>> import os
>>> os.mkdir("yenidizin")
>>> os.rmdir("yenidizin")
Bu nesneler bulunduğunuz dizinde veya genel olarak /root dizininde yenidizin isimli bir dizin oluşturur ve siler. os modulune bağlı olarak os.getcwd() bulunulan dizinin ismini verir: /root gibi. os.listdir() ise dizin içeriğini listeler.