Professional Documents
Culture Documents
PROGRAMLAMA
• Python ve Web
• Python ve IIS
İÇİNDEKİLER
etkileşimini,
• Internet Information Services
üzerine kurulumunu,
• Python ile web uygulaması
geliştirmeyi,
• Python'ın hazır mikro
çerçeveleri ile hızlı web
uygulamaları oluşturmayı
öğreneceksiniz.
ÜNİTE
12
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Python ile Web Programlama
Flask Nedir?
route() Dekoratörü
Python ve Flask
Değişken Dönüştürme
Benzersiz URL'ler
(Werkzeug)
url_for() Dekoratörü
Şablonlar (Templates)
GİRİŞ
Web geliştirmek için çok farklı programlama dilleri mevcuttur ve her geçen
gün daha fazlası eklenmektedir. Bu kadar çok programlama diline sahip olmamızın
ilk ve belki de en büyük nedeni, teknolojinin sürekli gelişmesidir. Daha fazla
teknoloji ortaya çıktıkça ve geliştikçe, bu teknolojiler için yazılım üretebilecek daha
fazla araca ihtiyaç duyulmaktadır. Diğer bir sebebi, her uygulama türünün farklı
türde donanım veya işletim sistemine ihtiyaç duyabilmesidir. Örneğin; mobil
uygulama geliştiricileri, Android uygulamaları yapmak için Java ve Kotlin'i veya iOS
uygulamaları yapmak için Swift'i kullanır. Diğer bir sebep ise her geliştiricinin
kendine uygun bir dil istemesidir. Örneğin; bazı geliştiriciler, süper hızlı ve
performanslı bir programlama dili isterken bazıları da haftalar değil birkaç gün
içinde uygulamalarını oluşturabilecekleri bir programlama dilini tercih ederler. Bu
noktada önemli olan, programlamaya başlarken yapılacak olan işin hangi dile
uygun olduğuna karar verilmesidir.
Python, PHP, C++, Ruby, Java ve C#, web uygulama geliştirmede en yaygın
kullanılan yüksek seviye programla dillerinden bazılarıdır. Chrome, Firefox, Opera
ve Microsoft Edge gibi yaygın internet tarayıcıları bu programlama dillerini direk
çalıştıramaz. Örneğin, Python sunucu taraflı çalışan bir programlama dilidir.
Netscape firmasının Python ile bir web uygulaması oluşturmak için bu dilin yanı sıra HTML (Hypertext
1995 yılında JavaScript’i Markup Language, Hiper Metin İşaretleme Dili), CSS (Cascading Style Sheets,
yaratırken asıl amaçları, Basamaklı Stil Şablonları) ve JavaScript gibi bütün tarayıcıların desteklediği ve
açık kaynak kodu ile istemci tarafında çalıştırılabilir olan dilleri de bilmek gerekir. HTML ve CSS bir
web geliştiriciliğini programlama dilinden çok bir işaretleme ve stil oluşturma dili olarak
yaygınlaştırmak nitelendirilmektedir. Tarayıcılar tarafından direk desteklen tek programlanabilir
istemeleriydi. dilin JavaScript olduğu söylenebilir. Bu nedenle Python geliştiricileri kendi web
uygulamalarını oluşturmak için Python ve JavaScript’in birlikte çalıştığı hazır
sistemleri kullanırlar. Bunlardan en yaygın olanları; Flask, Django, Web2py,
Tornado ve Bottle sayılabilir.
PYTHON VE WEB
Web üzerinde çalışan bir Python uygulaması geliştirmek için bazı temel
şartların oluşmuş olması gerekir. Bu şartları şu şekilde sıralayabiliriz.
IIS, ön değer olarak web sayfalarının fiziksel yolunu sistemin yüklü olduğu
sürücüdeki \intepub\wwwroot klasörü olarak tanımlar. Ancak yeni bir web sitesi
eklendiğinde sürücü üzerinde yapılandırılmış yeni veya mevcut bir klasör de
tanımlanabilir. Bu aşamada, öncelikle Windows başlat menüsünde cmd yazıp
açılan pencerede “Yönetici olarak çalıştır” seçimi yapalım ve komut satırına
geçelim. Şimdi web sitesi tanımlaması için Tablo 12.1’de gösterildiği gibi C:\
sürücüsü üzerinde Python klasörü içinde py_root adında bir klasör oluşturalım.
Tablo 12.1. Windows Komut Satırında py_root Klasörü Oluşturma
Gelen ekranda, sanal bir web klasörü oluşturmak için “Diğer Ad:” başlıklı
kutucuğa istenilen isim verilebilir, örneğin bu uygulama için py ismini verelim.
“Fiziksel Yol:” olarak da sürücü üzerinde açılmış olan yolu yazalım veya “[…]”
düğmesini tıklayarak yol seçimi yapalım. Şekil 12.3’de görüldüğü gibi bu uygulama
için “C:\Python\py_root” klasörü seçilmiştir.
Sanal web klasörü,
aslında var olmayan Şekil 12.4’de görüldüğü gibi, sanal klasör detay ekranında, yeni açılan py
fiziksel olarak başka bir klasörü tıklandığında, panelin sağ tarafında bu klasörle ilgili tanımlamaların olduğu
adresi gösteren dizindir. simgeler gelir.
İşleyici Eşleşmeleri ekranında kırmızı halka içine alınan Kod Eşleşmesi Ekle..
linkini tıklandığımızda ise Python programının exe dosyasını ve py uzantısını web
sunucusuna tanıtacağımız Şekil 12.6’ daki Kod Eşleşmesi Ekle ekranına ulaşırız.
Kod Eşleşmesi Ekle ekranında, istek yolu olarak Python programlama dilinin
uzantısı olan *.py tanımı yapalım. Çalıştırılabilir kutucuğuna Python programının
Uzantı, bir bilgisayar yüklendiği klasördeki Python.exe dosyası tanımlayalım ve %s %s parametrelerini
dosyasının hangi ekleyelim. Adı kutucuğuna da Python Interpreter diye tanıtıcı bir açıklama yazalım.
programa ait olduğunu Kod Eşleşmesi bilgileri girildikten sonra Tamam düğmesi tıkladığımızda Şekil
veya türünü belirten 12.7’deki onay ekranı gelir. Bu ekran onaylandığında artık Python kodları ile web
takıdır. sayfaları hazırlamaya başlayabiliriz.
XML Kodları
1. <?xml version="1.0" encoding="UTF-8"?>
2. <configuration>
web.config dosyasının 3. <system.webServer>
etkin olabilmesi için 4. <handlers>
applicationHost.config
5. <remove name="Python Interpreter" />
dosyasındaki “handler”
opsiyonunun 6. <add name="Python Interpreter" path="*.py" verb="*" modules="CgiModule"
scriptProcessor="C:\Python\Python310\python.exe %s %s" resourceType="File"
“overrideModeDefault”
requireAccess="Script" />
parametresi “Allow” 7. </handlers>
olmalıdır.
8 </system.webServer>
9. </configuration>
Python Komutları
1. print('Content-Type: text/html')
2. print('')
Çerçeve
Sunucu yapılar;
taraflı program; 3. print('<html>')
herhangi bir
bir web sitesinin 4. print('<body>')
programlama işletilen
sunucusundan dilinde
5. print('<h1>Merhaba Dünya!</h1>')
hızlı yazılım
koda dayanan
geliştirmeye türüdür.
imkân 6. print('</body>')
programlama
sağlayan hazır 7. print('</html>')
yapılardır.
localhost/py/merhaba_dunya.py dosyasının internet tarayıcısındaki çıktısı
Şekil 12.8’deki gibi olmalıdır.
PYTHON VE FLASK
Python programlama dili ile web üzerinde uygulama yapmak için genellikle
çerçeve yapı kullanılır. Flask konusuna geçmeden önce çerçeve yapı konusuna
değinmekte fayda olacaktır. Çerçeve yapı; herhangi bir programlama dilinde
üzerine program yazabileceğiniz hazır yapılar olarak tanımlanabilir. Bu yapı
sayesinde, oluşturulacak olan programa en baştan başlamak yerine hazır olan bir
seviyeden başlamak çok daha kolay olacaktır. Örneğin sıfırdan inşa etmek yerine
temeli uzman kişilerce atılmış ve hazır beton kullanılmış olan bir evi oluşturmak
çok daha kolaydır. Yazılım geliştirirken de bu yapı benzer bir amaca hizmet eder.
Geliştireceğiniz uygulamaya başlarken yazdığınız programı, uzman yazılımcılar ve
mühendisler tarafından oluşturulan sağlam bir temel üzerine inşa edeceğinizi
bilirsiniz.
Program oluştururken çerçeve yapı kullanmak zaman kazandırır. Her şeyi
sıfırdan yazmak gerekmez, bu nedenle hata yapma riski azalır. Bunun yanı sıra bu
yapı daha önceden uzman yazılımcılar tarafında test edildiği için güvenle
kullanılabilir. Diğer avantajları şöyle sıralayabiliriz:
Kodlama daha güvenlidir.
Daha basit test etme ve hata ayıklama imkânı verir.
Mikro çerçeveler; web Tekrar eden kodlar bulunmaz.
programlamada belirli Açık ve kolay uyarlanabilir bir yapısı vardır.
araçlar veya Kendi uygulamanıza odaklanmanıza imkân sağlar.
kütüphaneler İstenirse ekleme yapılıp genişletilebilir.
gerektirmeyen hazır Çerçeve yapılar, web sitesi geliştirirken kullanılır.
yapılardır.
• Flask
• Django
• AngularJS
• Rails
• Express
• Flutter
• Xamarin
• React Native
• NativeScript
• Ionic
Çerçeve yapılar; bilimsel çalışmalar ve veri bilimi gibi pek çok alanda
kullanılmaktadır.
Flask Nedir?
Flask, Python programlama dili ile yazılmış ücretsiz ve açık kaynak kodlu bir
web uygulama mikro çerçeve yapılı yazılımdır. Mikro çerçeve olarak
tanımlanmasının sebebi özel araçlara veya program kütüphanelerine ihtiyaç
duymamasındandır. Kendine has veri tabanı uygulama katmanı, doğrulama sayfası
veya ortak fonksiyon kullanımı sağlayan kütüphane dosyaları bulunmaz. Fakat pek
çok eklentiyi kendi yapısı dâhilindeymiş gibi destekleme özelliğine sahiptir.
Flask, 2004 yılında kurulan uluslararası bir Python meraklıları grubu olan
Pocoo’dan Armin Ronacher tarafından oluşturulmuştur. Flask, Ronacher’ın 2010
Flask Kurulumu
Flask, Python 3.6 ve daha yeni bir sürümünü destekler. Flask, iki farklı
şekilde kurulabilir. İlk olarak, açık kaynak kodunun bulunduğu
https://github.com/flask-api/flask-api sitesinden indirilip el ile kurulum yapılabilir.
Bu metot yeni başlayanlar için uygun değildir. İkinci olarak, Tablo 12.5’de
gösterilen şekilde, komut satırında “pip” komutu kullanılarak kurulum yapmaktır.
Tablo 12.5. pip Komutu İle flask Kurulumu
C:\Python\Python310\Scripts>
Kurulum başarı ile tamamlandığında bundan sonraki adım Internet
Information Services sunucusunda gerekli tanımlamaların yapılmasıdır. IIS
kurulduğunda Siteler başlığı altında Default Web Site otomatik olarak tanımlanır.
Bütün internet tarayıcıları bir web sitesini ziyaret ederken önce 80. protokol
Önceki bölümde mevcut yapının altında yeni bir uygulama açmış ve tarayıcı
ekranına “Merhaba Dünya!” yazan bir Python program kodunu çalıştırmıştık.
Şimdi bu yapı üzerinden devam edelim.
py_root klasörü içindeki web.config dosyasını herhangi bir metin editörü ile
açıp, Tablo 12.6’da verilen şekle dönüştürelim. Bu tanımlamalar, Windows
WSGI (Web Server
Internet Information Services web sunucusunun Python program komutlarını
Gateway Interface),
tanıması ve çalıştırması için yapılmaktadır.
Web Sunucusu Ağ
Geçidi Arabirimi; web Tablo 12.6. Yeni web.config Dosyasının İçeriği
sunucularının Python XML Kodları
programlama dilinde 1. <?xml version="1.0" encoding="UTF-8"?>
yazılmış web
2. <configuration>
uygulamalarına ve
3. <system.webServer>
çerçevelerine istek
iletmesini sağlayan bir 4. <handlers>
çağrı kuralıdır. 5. <add name="Python FastCGI"
6. path="*"
7. verb="*"
8. modules="FastCgiModule"
scriptProcessor="C:\Python\Python310\python.exe|C:\Python\Python310\lib\si
te-packages\wfastcgi.py"
9. resourceType="Unspecified"
10. requireAccess="Script" />
11. </handlers>
12. </system.webServer>
13. <appSettings>
14. <add key="WSGI_HANDLER" value="merhaba_dunya.app" /> <!--
{name_of_file}.{name_of_flask_app}-->
15. <add key="PYTHONPATH" value="C:\Python\py_root" />
16. <add key="WSGI_LOG" value="C:\Python\py_root\app.log" />
17. </appSettings>
18. </configuration>
C:\Python\Python310\Scripts>
Kurulum tamamlandıktan sonra Tablo 12.9’daki gibi wfastcgi-enable
komutuyla aktif hale getirilmesi gerekir.
Tablo 12.9. wfastcgi-enable Komutunun Çalıştırılması
C:\Python\Python310\Scripts>
Artık web sunucusu ile Python programlama dili arasında köprü
kurulduğuna göre bundan sonra Flask ile ilk uygulamamızı oluşturabiliriz.
Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3. @app.route('/py')
4. def index():
5. return 'IIS üzerinden Merhabalar!'
6. @app.route('/py/Merhaba')
escape() Dekoratörü
escape() dekoratörü, internet üzerinden olası bir saldırıdan korunmak diğer
bir deyişle kaçmak için kullanılır. Bir HTML döndüğünde kullanıcının gönderdiği
değerlerin kontrolü otomatik olarak Jinja tarafından yapılır. Eğer kullanıcı
Jinja, Python
tarafından gönderilen veri, escape() süzgecinden geçtikten sonra
programlama dili için
<script>alert(“bad”)</script> sonucunu döndürürse, program çalıştırılmaz onun
oluşturulmuş bir
yerine gelen değer ekrana metin olarak basılır.
tasarım motorudur.
Tablo 12.9. escape() Dekoratörünün Kullanımı
Python Komutları
1. from flask import Flask
2. from markupsafe import escape
3. app = Flask(__name__)
4. @app.route("/py/<adi>")
5. def selamla(adi):
route() Dekoratörü
Web uygulaması geliştirilirken kullanıcılara yardımcı olmak için anlamlı web
linkleri kullanılır. Kullanıcılar hatırlayabilecekleri bir adresi genellikle daha sık
ziyaret ederler. Python, bu sebeple bir işlevi belirli bir adrese yönlendirmek için
route() dekoratörünü kullanır.
Tablo 12.10. route() Dekoratörünün Kullanımı
Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3. @app.route('/py')
4. def index():
5. return 'Ana Sayfa'
6. @app.route('/py/merhaba')
7. def hello():
8. return 'Merhaba Dünya!'
Bireysel Etkinlik
Değişken Dönüştürme
Adresin dinamik hale Bir web adresine değişken isim atanarak o adresin dinamik hale gelmesi
gelmesi; kullanıcıya sağlanabilir. Bunu yapmak için değişken isimler küçüktür (<) ve büyüktür(>)
içerik alışverişi ve karakterleri arasına yazılır. Değişken, istenilen veri türüne çevrilebilir. Python
etkileşim imkânları programlama dilindeki dönüştürülebilir veri türleri ve açıklamaları şunlardır:
sunulmasıdır. string: Bölüm (/) işareti olmayan her metni kabul eder
int: Pozitif tam sayıları kabul eder.
float: Pozitif ondalık sayıları kabul eder
path: String ile aynı fakat Bölüm (/) karakterini de kabul eder.
uuid: UUID string türünü kabul eder.
Aşağıda, Tablo 12.11’de verilen Python programı kullanılarak bazı veri türü
dönüşümlerine örnekler verilmiştir.
Tablo 12.11. Dinamik İsim Kullanımı
Python Komutları
1. from flask import Flask
2. from markupsafe import escape
3. app = Flask(__name__)
4.
5. @app.route('/py/kullanici/<kullanici_adi>')
6. def kullanici_profili_goster(kullanici_adi):
7. # Bu kullanici için profil göster
8. return f'Kullanıcı {escape(kullanici_adi)}'
9.
10. @app.route('/py/posta/<int:posta_no>')
11. def posta_goster(posta_no):
12 # posta_no tam sayi ise posta göster
13. return f'Posta {posta_no}'
14.
15. @app.route('/py/altyol/<path:altyol>')
16. def altyol_goster(altyol):
17. # /py/yol dan sonraki altyol’u göster
18. return f'Altyol {escape(altyol)}'
Örnek
•Tablo 12.11'de verilen Python program koduna internet
tarayıcısında http://localhost/py/kullanici/Guido van Rossum
Guido van Rossum, adresinden ulaşılırsa, profil_goster fonksiyonu çalışır ve ekrana
Python programlama aşağıdaki metni basar:
dilini geliştiren
Kullanıcı Guido van Rossum
yazılımcıdır.
Werkzeug; Python
programlama dilinde
oluşturulan URL'lerin
•Tablo 12.11'de verilen Python program koduna internet
Örnek
tarayıcısında http://localhost/py/altyol/Yenimahalle/ANKARA
adresinden ulaşılırsa, altyol_goster fonksiyonu çalışır ve ekrana
aşağıdaki metni basar (Yenimahalle'den sonra, / [bölüm] işaretinin
ekrana basıldığına dikkat ediniz).
Altyol Yenimahalle/ANKARA
Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3.
4. @app.route('/py/flask')
5. def merhaba_flask():
6. return 'Merhaba Flask'
7.
8. @app.route('/py/python/')
9. def merhaba_python():
10. return 'Merhaba Python'
11. if __name__ == '__main__':
12. app.run()
url_for() Dekoratörü
url_for() dekoratörü, özel fonksiyonlar için dinamik URL oluştururken
kullanılır. url_for dekoratörünün ilk parametresine özel fonksiyonun adı atanır.
Sonraki bir veya daha fazla parametreler ise, oluşturulan URL’nin diğer özelliklerini
tanımlamak için kullanılır.
Tablo 12.13. Dinamik İsim Kullanımı
Python Komutları
1. from flask import Flask, redirect, url_for
2. app = Flask(__name__)
3.
4. @app.route('/py/amir')
5. def merhaba_amir():
6. return 'Merhaba Amirim'
7.
8. @app.route('/py/misafir/<misafir>')
9. def merhaba_misafir(misafir):
10. return 'Misafir olarak hos geldin %s' % misafir
11.
12 @app.route('/py/kullanici/<adi>')
13. def merhaba_kullanici (adi):
14. if adi == 'amir':
15. return redirect(url_for('merhaba_amir'))
16. else:
17. return redirect(url_for('merhaba_misafir',misafir = adi))
18.
19. if __name__ == '__main__':
20. app.run(debug = True)
Python Komutları
1. <html>
2. <body>
3. <form action = "http://localhost/py/login" method = "POST">
4. <p>Kullanıcı Adı:</p>
5. <p><input type = "text" name = "adi" /></p>
6. <p><input type = "submit" value = "Gönder" /></p>
7. </form>
8. </body>
9. </html>
Python Komutları
1. from flask import Flask, redirect, url_for, request
2. app = Flask(__name__)
3.
4. @app.route('/py/basarili/post/<adi>')
5. def success_post(adi):
6. return 'Merhaba (POST) %s' % adi
7.
8. @app.route('/py/basarili/get/<adi>')
9. def success_get(adi):
10. return 'Merhaba (GET) %s' % adi
11.
12 @app.route('/py/login',methods = ['POST','GET'])
13. def login():
14. if request.method == 'POST':
15. kullanici = request.form['adi']
16. return redirect(url_for('success_post', adi = kullanici))
17. else:
yapın.
• C:\Python\py_root\login.html sayfasını herhangi bir internet
tarayıcısıyla açın.
• Kullanıcı Adı alanına flask yazın ve Gönder butonunu tıklayın.
• Gelen sonuç ekranında hangi metodun çalıştığını gözlemleyin.
Şablonlar (Templates)
Belirli bir URL'ye bağlı bir fonksiyonun çıktısını, HTML biçimine döndürmek
mümkündür. Örneğin, Şekil 12.16‘da merhaba () fonksiyonu ekrana <h1> etiketi
Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3.
4. @app.route('/py')
5. def selam_soyle():
6. return '<html><body><h1>Merhaba Dünya</h1></body></html>'
7.
8. if __name__ == '__main__':
9. app.run(debug = True)
Python Komutları
1. from flask import Flask, render_template
2. app = Flask(__name__)
3.
4. @app.route('/py/merhaba/<adi>')
5. def selam_soyle(adi):
6. return render_template('merhaba.html', isim = adi)
7.
8. if __name__ == '__main__':
9. app.run(debug = True)
DEĞERLENDİRME SORULARI
“Web programlamada belirli araçlar veya kütüphaneler gerektirmeyen
hazır yapılardır.”
1. Yukarıda tanımı yapılan kavram aşağıdakilerden hangisidir?
a) Uzantı
b) WSGI
c) Mikro çerçeve
d) Sanal web klasörü
e) FastCGI
Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3. @app.route('/py')
4. def index():
5. return 'IIS üzerinden Merhabalar!'
6. @app.route('/py/Merhaba')
7. def merhaba_dunya():
8. return 'Yeni Dizin Yapısından Merhaba Dünya!'
9. if __name__ == '__main__':
10. app.run()
Cevap Anahtarı
1.c, 2.e, 3.b, 4.d, 5.a, 6.d, 7.e, 8.a, 9.c, 10.b
YARARLANILAN KAYNAKLAR
Dosya Uzantısı 31.01.2022 tarihinde
https://tr.wikipedia.org/wiki/Dosya_uzant%C4%B1s%C4%B1 adresinden
erişildi.
FastCGI nedir? Avantaj ve Dezavantajları, 31.01.2022 tarihinde
https://www.sordum.net/12613/fastcgi-nedir-avantaj-ve-dezavantajlari/
adresinden erişildi.
LEARN FLASK web application framework 15.12.2021 tarihinde
https://www.tutorialspoint.com/flask/index.htm adresinden erişildi.
PYTHON 15.12.2021 tarihinde https://python.org adresinden erişildi.
Sunucu tarafı programlama nedir? 31.01.2022 tarihinde
https://www.codeturkiye.com/sunucu-tarafi-programlama-nedir/
adresinden erişildi.