You are on page 1of 29

PYTHON İLE WEB

PROGRAMLAMA

• Python ve Web
• Python ve IIS
İÇİNDEKİLER

• Python ile İlk Web İNTERNET


Uygulaması
• Python ve Flask PROGRAMCILIĞI II
Öğr. Gör. Dr. Uğur
YILDIRIM

• Bu üniteyi çalıştıktan sonra;


• Python programla dilinin web ile
HEDEFLER

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?

PYTHON İLE WEB PROGRAMLAMA


Flask Kurulumu
Python ve Web

Temel Uygulama Yapısı


Python ve IIS

Python ile İlk Web escape() Dekoratörü


Uygulaması

route() Dekoratörü
Python ve Flask
Değişken Dönüştürme

Benzersiz URL'ler
(Werkzeug)

url_for() Dekoratörü

HTTP İletişim Metotları

Şablonlar (Templates)

Atatürk Üniversitesi Açıköğretim Fakültesi 2


Python ile Web Programlama

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.

 Python programlama dilinin en son sürümünün kurulu olduğu bir


bilgisayar. Bilgisayarın sahip olması gereken minimum özellikler önceki
ünitede belirtilmişti.
 Program kodlarının yazılabileceği tümleşik yazılım geliştirme ortamı (IDE,
Integrated Development Environment). Akıllı kod navigasyonu, hızlı ve
güvenli yeniden düzenleme özelliği, hata ayıklama, test etme, profil
oluşturma, dağıtım yapabilme, uzaktan geliştirme ve veri tabanı gibi
özelliklere sahip olan bir metin editörü uygun olacaktır.
 Web servisi (Apache, Internet Information Services, vb.)

Atatürk Üniversitesi Açıköğretim Fakültesi 3


Python ile Web Programlama

 Web çerçevesi (framework).Profesyonel anlamda kullanımda olan bir web


çerçevesi (çatısı) seçilmesi, üretilecek programa performans ve süreklilik
açısından fayda sağlayacaktır.
Bu ünitede, bir web servisi kullanılarak Python ile basit web uygulamaları
MD (Make Directory) ve
geliştirilecektir. İlk önce geliştirme ortamı yazılımı, minimum bilgisayar gerekliliğini
CD (Change Directory)
karşılayan ve Python uygulamasının yüklü olduğu bilgisayara indirilir ve kurulum
gibi Windows komut
yapılır. Bu örnekte Internet Information Web Servisleri kullanılacaktır.
satırında çalıştırılan bazı
komutlar eski MS-DOS PYTHON VE IIS
işletim sistemi
komutlarıdır. Python programının Windows işletim sisteminin bir eklentisi olan ve web
sunucu hizmeti veren IIS (Internet Information Services) uygulamasında
çalışabilmesi için bazı ayarların yapılması gerekir. Örneğin, web sunucusuna
Python’un dosya uzantısı olan py türünü tanıtmak gerekir. Windows İşletim
Sisteminin IIS özelliğini kullanıma açmak için şu adımlar takip edilir.

 Kontrol paneli’nden uygulamalar ve özellikleri simgesi tıklanır.


 Sağ bölmede programlar ve özellikler linki tıklanır.
Bu bölümde, Python  Açılan pencerenin sol bölmesindeki windows özelliklerini aç veya kapat
programlama dilini web linki tıklanır.
sunucusu üzerinde  Gelen yeni pencerede ınternet ınformation services kutucuğu tıklanarak
çalıştırmak için işaretlenir. Bu kutucuğun altındaki world wide web hizmetleri kutucuğu ve
Microsoft Windows 10 uygulama geliştirme özelliklerinin içindeki CGI kutucuğunun işaretlenmiş
işletim sistemi üzerinde olması gerekmektedir.
çalışan Internet  Şekil 12.1’deki tamam düğmesi tıklandıktan sonra bu özelliğin yüklenmesi
Information Services beklenir. Yükleme tamamlandıktan sonra python programlama dilinin
10.0.0 sürümü tanımlanmasına geçilebilir.
kullanılmıştır.

Şekil 12.1. Windows 10 Sisteminde IIS Özelliğini Açık Hale Getirme

Diğer bir kısa yol olan %windir%\system32\OptionalFeatures.exe komutu


çalıştırılarak da aynı pencereye erişim sağlanabilir. Bu açıklamadan sonra diğer
pencerelerin açılma durumunu belirtmek için kısa yol komutları tercih edilecektir.

Atatürk Üniversitesi Açıköğretim Fakültesi 4


Python ile Web Programlama

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

Windows Komut Satırı


C:\> MD \Python\py_root
Bu klasöre IIS’in okuyabilmesi ve çalıştırabilmesi için gerekli olan okuma ve
çalıştırma yetkisinin verilmesi gerekir. Bunu yapabilmek için Tablo 12.2’de
görüldüğü gibi, icacls.exe komutu ile önce yetkilendirme yapalım, ardından
%windir%\system32\inetsrv\iis.msc kısa yol komutu ile IIS yönetim paneli açalım.
Tablo 12.2. icacls.exe Komutu İle Yetkilendirme

Windows Komut Satırı


C:\> CD \Python
C:\ Python> icacls py_root /grant "NT AUTHORITY\IUSR:(OI)(CI)(RX)"
C:\ Python> icacls py_root /grant "Builtin\IIS_IUSRS:(OI)(CI)(RX)"
C:\ Python> %windir%\system32\inetsrv\iis.msc
Şekil 12.2’de görüldüğü gibi yönetim paneli açıldıktan sonra en başında
bilgisayarın adı olan ve İnternet Bilgi Servislerini gösteren hiyerarşik yapıda
bağlantılar gelir.

Şekil 12.2. Windows İnternet Bilgi Servisleri Paneli

Bu hiyerarşik yapı genişletildiğinde gelen “Default Web Site” simgesinin


üzerindeyken farenin sağ tuşu tıklandığında açılan menüden “Uygulama Ekle..”
seçeneğini seçelim.

Atatürk Üniversitesi Açıköğretim Fakültesi 5


Python ile Web Programlama

Şekil 12.3. Yeni Web Klasörü Tanımlama Ekranı

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.

Şekil 12.4. Sanal Klasör Detay Ekranı

Bu simgelerden “İşleyici Eşleşmeleri” simgesini çift tıklarsak Şekil 12.5’de


görülen “Kod Eşleşmesi” yapılacak ekrana ulaşırız.

Atatürk Üniversitesi Açıköğretim Fakültesi 6


Python ile Web Programlama

Şekil 12.5. İşleyici Eşleşmeleri Ekranı

İş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.

Şekil 12.6. Kod Eşleşmesi Ekleme Ekranı

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.

Atatürk Üniversitesi Açıköğretim Fakültesi 7


Python ile Web Programlama

Şekil 12.7. Kod Eşleşmesi Ekleme Onay Ekranı

Kod eşleşmesi tamamlandıktan sonra, seçilen uygulama yolunun içinde,


web sitesinin ortak konfigürasyon ayarlarının tutulduğu XML tabanlı bir dosya olan
web.config adında bir dosya oluşturulmalıdır. Bu dosya, sistemin kök dizininde
olabileceği gibi belli dizinler altında da olabilir. web.config dosyasının bir örneği
Tablo 12.3’de verilmiştir.
Tablo 12.3. web.config Dosyasının İçeriği

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 İLE İLK WEB UYGULAMASI


Önceki bölümde kurulan sistemin çalışıp çalışmadığını test etmek ve Python
ile ilk uygulamamızı oluşturmak için, daha önce açmış olduğumuz py_root
klasörünün içinde merhaba_dunya.py adında bir dosya oluşturalım ve içine Tablo
12.4’de verilen Python program kodlarını yazalım. Windows işletim sisteminde
karakter kodlaması olarak genellikle Windows-1254 karakter kümesi kullanılır.
Türkçe karakterlerin internet tarayıcısında doğru olarak ekrana basılabilmesi için
yeni bir dosyayı kaydederken dil kodlamasını UTF-8 seçmekte fayda olacaktır.
Ayrıca 6. satırdaki boşluk karakteri verilmediği takdirde internet tarayıcısının hata
döndüreceğini unutmayınız. Python programlama dilinde print komutu tırnak
içinde yazılan metnin ekrana basılmasını sağlar. Python sunucu taraflı çalışan bir
programlama türüdür. Bu sebeple komutları sunucu tarafında çalıştırır.
merhaba_dunya.py dosyası komut satırında derlenmiş olsaydı HTML etiketlerinin

Atatürk Üniversitesi Açıköğretim Fakültesi 8


Python ile Web Programlama

de dahil olduğu metin ekrana yazılacaktı. “Content-Type” parametresi olan


“text/html” değeri, İnternet tarayıcılarında HTML etiketlerinin gözükmemesi
içindir. Bu parametre tanımı ve aldığı değer, tarayıcıda içerik olarak gözükmez.
Tablo 12.4. merhaba_dunya.py Adlı Test Amaçlı Python Program Kodu

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.

Şekil 12.8. merhaba_dunya.py Adlı Test Amaçlı Programın Tarayıcıdaki Çıktısı

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

Atatürk Üniversitesi Açıköğretim Fakültesi 9


Python ile Web Programlama

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.

• Web uygulamalarında kullanılan en yaygın çerçeve yapılar:


Örnek

• Flask
• Django
• AngularJS
• Rails
• Express

Çerçeve yapıların bir diğer çalışma alanı mobil uygulama geliştirmektir.

• Mobil uygulamalarda kullanılan en yaygın çerçeve yapılar:


Örnek

• 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

Atatürk Üniversitesi Açıköğretim Fakültesi 10


Python ile Web Programlama

yılındaki 1 Nisan şakası olarak başlamış ve günümüzde birçok uygulamada


kullanılan bir çerçeve yapısına dönüşmüştür. Flask, Werkzeug WSGI araç setini ve
Jinja2 şablon motorunu temel alır. Her ikisi de Pocco projeleridir.
WSGI, Web Sunucusu Ağ Geçidi Arayüzü (WSGI), web sunucularının Python
programlama dilinde yazılmış olan web uygulamalarına ve çerçevelerine istek
iletmesini sağlayan bir çağrı kuralıdır. WSGI, Python ile web uygulamaları
geliştirirken kullanılan bir standart olarak benimsenmiştir.
Werkzeug, istekleri, yanıt nesnelerini ve diğer yardımcı işlevleri uygulayan
bir WSGI araç takımıdır. Flask çerçevesinin temelini oluşturan yapılardan biridir.
Jinja2, Python programlama dili için oluşturulmuş bir şablon motorudur.
Dinamik web sayfaları oluşturmak için bir şablonu belirli bir veri kaynağıyla
birleştirir.
Flask, Python programının kurulu olduğu bütün ortamlarda çalışabilir. Bu
bölümde Microsoft Windows 10 işletim sistemi ortamı tercih edilmiştir. Flask,
mikro çerçeve yapısını kullanabilmek için Microsoft Windows 10 işletim sistemine
Python programının ve Python desteği olan bir web sunucusun kurulmuş olması
gerekmektedir. Önceki bölümlerde bu işlemlerin nasıl yapıldığı anlatılmıştı.
Sonraki bölümde Flask’ın Microsoft Windows 10 işletim sistemi üzerinde
kurulumu anlatılacaktır.

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

Windows Komut Satırı


C:\> CD \Python\Python310\Scripts
C:\Python\Python310\Scripts>pip install flask
Collecting flask
Using cached Flask-2.0.2-py3-none-any.whl (95 kB)
Requirement already satisfied: Werkzeug>=2.0 in c:\Python\python310\lib\site-packages (from flask) (2.0.2)
Requirement already satisfied: click>=7.1.2 in c:\Python\python310\lib\site-packages (from flask) (8.0.3)
Requirement already satisfied: Jinja2>=3.0 in c:\Python\python310\lib\site-packages (from flask) (3.0.3)
Requirement already satisfied: itsdangerous>=2.0 in c:\Python\python310\lib\site-packages (from flask) (2.0.1)
Requirement already satisfied: colorama in c:\Python\python310\lib\site-packages (from click>=7.1.2->flask) (0.4.4)
Requirement already satisfied: MarkupSafe>=2.0 in c:\Python\python310\lib\site-packages (from Jinja2>=3.0->flask)
(2.0.1)
Installing collected packages: flask
Successfully installed flask-2.0.2

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

Atatürk Üniversitesi Açıköğretim Fakültesi 11


Python ile Web Programlama

kanalına (80. Port) erişmek isterler. Bu nedenle bu kanal numarası erişilmek


istenen internet adresine yazılmaz. IIS’de, ön değer olarak 80. kanaldan yayın
yapacak şekilde tanımlanır. Bu aşamada Flask çerçevesini İnternet Information
Services’e tanımlamak için karşımıza üç seçenek çıkar:
 Mevcut tanım değiştirilmeden “Default Web Site” içine bir uygulama veya
sanal dizin eklenir. Bu durumda yayın kanalı değişmez. Bu seçenek
kullanılırsa Python dizinleri oluştururken herhangi bir çakışmaya imkân
vermemek için mevcut dizin yapılarına dikkat edilmesi gerekir.
 Mevcut tanım değiştirilmeden yeni bir Web Sitesi eklenir ancak yayın
kanalı 80. kanaldan farklı ve başka protokoller tarafından kullanılmayan bir
kanal seçilir (örneğin; 81, 8081 gibi).
 Mevcut tanım silinir, yerine 80. kanaldan yeni bir Python sitesi tanımlanır.

Ö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" />

Atatürk Üniversitesi Açıköğretim Fakültesi 12


Python ile Web Programlama

17. </appSettings>
18. </configuration>

Web sunucusu ile Python arasında, WSGI ve FastCGI kullanarak köprü


vazifesi gören wfastcgi eklentisinin kurmak için Tablo 12.8’de görüldüğü gibi,
Windows komut satırında pip komutu kullanılır.
Tablo 12.8. wfastcgi Eklentisinin Kurulumu

Windows Komut Satırı


C:\Python\Python310\Scripts>pip install wfastcgi
FastCGI; web
Collecting wfastcgi
uygulamalarında Using cached wfastcgi-3.0.0.tar.gz (14 kB)
hızlanma etkisi yapan Preparing metadata (setup.py) ... done
bir web sunucusu Using legacy 'setup.py install' for wfastcgi, since package 'wheel' is not installed.
eklentisidir. Installing collected packages: wfastcgi
Running setup.py install for wfastcgi ... done
Successfully installed wfastcgi-3.0.0

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ı

Windows Komut Satırı


C:\Python\Python310\Scripts>wfastcgi-enable
"MACHINE/WEBROOT/APPHOST" gönderme yolundaki "MACHINE/WEBROOT/APPHOST" için
"system.webServer/fastCgi" bölümünde yapılandırma değişiklikleri uygulandı
"C:\Python\Python310\python.exe|C:\Python\Python310\lib\site-packages\wfastcgi.py" can now be used as a
FastCGI script processor

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.

Temel Uygulama Yapısı


Önceki bölümde açmış olduğumuz merhaba_dunya.py dosyasını Tablo
12.7’deki gibi değiştirelim.
Tablo 12.7. merhaba_dunya.py Dosyasının İçeriği

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')

Atatürk Üniversitesi Açıköğretim Fakültesi 13


Python ile Web Programlama

7. def dunyayi_selamla ():


8. return 'Yeni Dizin Yapisindan Merhaba Dünya!'
9. if __name__ == '__main__':
10. app.run()

Şimdi de oluşturduğumuz bu dosyanın içindeki satırların ne anlama geldiğini


Tablo 12.8’i kullanarak satır bazında inceleyelim:
Tablo 12.8. merhaba_dunya.py Dosyasının Satır Açıklamaları

1.Satır from flask import Flask Flask sınıfı programa dahil


ediliyor.
2.Satır app = Flask(__name__) Flask sınıfının yeni bir örneği
oluşturuluyor ve bu sınıfa isim
vermek için __name__
değişkeni atanıyor.
3. Satır @app.route('/py') route() dekaratörü ile hangi
web adresine yönlendirileceği
bildiriliyor (bu örnekte kök
adres “/py”).
4. Satır def index(): index() adında bir fonksiyon
tanımlanıyor.
5. Satır return 'IIS üzerinden Merhabalar!' Fonksiyondan bir metin
Python dekoratörleri;
döndürülüyor. Bu değerin
Başka bir fonksiyonu tarayıcıdaki içerik tipi
parametre olarak alan HTML’dir.
ve yeni bir fonksiyon 6.Satır @app.route('/py/Merhaba') Tarayıcıya kök adresinden
döndürebilen sonra “/Merhaba” eklenirse
fonksiyonlardır. hangi fonksiyonu çalıştıracağı
tanımlanıyor
7.Satır def dunyayi_selamla(): “dunyayi_selamla ()” adında
bir fonksiyon tanımlanıyor.
8. Satır return 'Yeni Dizin Yapisindan Fonksiyondan başka bir metin
Merhaba Dünya!' döndürülüyor.
9.Satır if __name__ == '__main__': Değer “true” olarak dönerse
localhost; o anda app.run() programın kendi kendine
10.Satır
kullanılan bilgisayarı çalıştırıldığı anlamına geliyor.
veya sahip olduğu
Bir internet tarayıcısı kullanarak http://localhost/py adresine erişim
internet adresini
sağlandığımızda dosya ismi merhaba_dunya ve uzantısı py olan dosyaya yani
belirtir. 127.0.0.1 IP
merhaba_dunya.py dosyasına yönlendiriliriz (web.config dosyasında
adresi, özel amaçlı bir
WSGI_HANDLER anahtar değerini merhaba_dunya.app yaptığımız için). İnternet
IPv4 adresidir ve
adresi olarak da, localhost/py olarak tanımlandığımız için bu adrese tanımlanmış
localhost veya loopback
olan index() fonksiyonunu çalıştırmış oluruz. Şekil 12.9’da görüldüğü gibi, bu
adresi olarak da
fonksiyondaki mesaj olan 'IIS üzerinden Merhabalar!' mesajı ekrana basıldı. Bu,
adlandırılır.
artık Flask çerçevesinin kullanılabilir durumda olduğunu göstermektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 14


Python ile Web Programlama

Şekil 12.9. Flask Çerçevesi İle İlk Program

http://localhost/py/Merhaba adresine erişim sağladığımızda ise,


merhaba_dunya.py dosyasındaki /py/Merhaba klasörüne tanımlanan
dunyayi_selamla() fonksiyonuna yönlendiriliriz. Şekil 12.10’da görüldüğü gibi o
satırdaki 'Yeni Dizin Yapısından Merhaba Dünya!' mesajı ekrana basılır.

Şekil 12.10. Flask Çerçevesi İle İlk Yönlendirme

Flask’ın program geliştirilirken kullanılan bazı önemli özelliklerinin


açıklanmasında fayda olacaktır.

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):

Atatürk Üniversitesi Açıköğretim Fakültesi 15


Python ile Web Programlama

6. return f"Selamlar, {escape(adi)}!"

• py_root klasörü içindeki merhaba_dunya.py dosyasına, Tablo


Bireysel Etkinlik 12.9'daki Python program kodunu yazın (kopyala-yapıştır
yapmayınız).
• http://localhost/py/Guido adresini ziyaret edin. Tarayıcı ekranına
ne basıldığını inceleyin.
• http://localhost/py/Gui%do adresini ziyaret edin. Tarayıcı
ekranına basılan hata mesajını inceleyin.

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

• py_root klasörü içindeki merhaba_dunya.py dosyasına, Tablo


12.10'daki Python program kodunu yazın (kopyala-yapıştır
yapmayınız).
• http://localhost/py adresini ziyaret edin. Tarayıcı ekranına ne
basıldığını inceleyin.
• http://localhost/py/merhaba adresini ziyaret edin. Tarayıcı
ekranındaki değişikliği inceleyin.

Atatürk Üniversitesi Açıköğretim Fakültesi 16


Python ile Web Programlama

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)}'

Tablo 12.11'de verilen Python program kodundaki /py/kullanici/ yoluna


<kullanici_adi> yerine herhangi bir isim eklediğinizde, kullanici_profili_goster
fonksiyonu çalışır.

Atatürk Üniversitesi Açıköğretim Fakültesi 17


Python ile Web Programlama

Ö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.

Tablo 12.11'de verilen Python program kodundaki /py/posta/ yoluna


<int:posta_no> yerine herhangi bir posta numarası eklediğinizde, posta_goster
fonksiyonu çalışır.

Werkzeug; Python
programlama dilinde
oluşturulan URL'lerin
•Tablo 12.11'de verilen Python program koduna internet
Örnek

benzersiz olmasını tarayıcısında http://localhost/py/posta/06500 adresinden ulaşılırsa,


sağlayan bir WSGI web posta_goster fonksiyonu çalışır ve ekrana aşağıdaki metni basar:
uygulama
kütüphanesidir. Posta 6500

Tablo 12.11'de verilen Python program kodundaki /py/yol/ yoluna


<path:subpath> yerine herhangi bir alt yol eklediğinizde, altyol_goster fonksiyonu
çalışır.

•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

Benzersiz URL’ler (Werkzeug)


Werkzeug, kapsamlı bir WSGI web uygulama kütüphanesidir. Werkzeug,
Python programlama dilinde oluşturulan URL'lerin benzersiz olmasını sağlar. Tablo
12.12’deki Python programında, merhaba_flask ve merhaba_python fonksiyonları
aynıymış gibi gözükse de aslında farklıdırlar. Adres olarak “/python” veya
“/python/” kullanmak aynı çıktıyı döndürür ancak “/flask” doğru çalışırken
“/flask/” 404 – Bulunamadı hatası ile sonuçlanır.
Tablo 12.12. Benzersiz URL Kullanımı

Atatürk Üniversitesi Açıköğretim Fakültesi 18


Python ile Web Programlama

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'))

Atatürk Üniversitesi Açıköğretim Fakültesi 19


Python ile Web Programlama

16. else:
17. return redirect(url_for('merhaba_misafir',misafir = adi))
18.
19. if __name__ == '__main__':
20. app.run(debug = True)

Tablo 12.13’deki programdaki kullanici(adi) adında fonksiyon, kullanıcı


tarafından gerilen parametreye göre bir URL oluştur. Merhaba_kullanici()
fonksiyonu önce girilen değerin amir olup olmadığını kontrol eder. Eğer eşleşirse
merhaba_amir() fonksiyonunu çalıştırır, eşleşmezse merhaba_misafir()
fonksiyonunu çalıştırır.

• py_root klasörü içindeki merhaba_dunya.py dosyasına, Tablo


Bireysel Etkinlik

12.13'deki Python program kodunu yazın (kopyala-yapıştır


yapmayınız).
• http://localhost/py/kullanici/amir adresini ziyaret edin. Tarayıcı
URL, Uniform Resource
ekranına ne basıldığını inceleyin.
Loader, internet
• http://localhost/py/kullanici/Guido adresini ziyaret edin. Tarayıcı
tarayıcınızda bulunan, ekranına ne basıldığını inceleyin.
site adresinin belirtildiği • Her bir ziyaret için tarayıcının adres kısmındaki değişikliği
çubukta yer alan gözlemleyin.
bilgidir.

HTTP İletişim Metotları


HTTP protokolü World Wide Web’de veri iletişimi için kullanılır. Açılımı
Hypertext Transfer Protokol olan HTTP, bu iletişimi sağlarken farklı metotlar
kullanır. Bu metotlar şunlardır:
 GET metodu, verileri şifrelenmemiş bir şekilde sunucuya iletir. En yaygın
kullanılan metottur.
 HEAD metodu, GET ile aynıdır, farkı GET metodunun aksine hiçbir mesaj
başlığı döndürmez.
 POST metodu, sunucuya HTML form verisi göndermek için kullanılır. POST
HTTP ile belli bir oranda yöntemiyle alınan veriler sunucu tarafından önbelleğe alınmaz.
güvenli veri aktarımı  PUT metodu, hedef kaynağın tüm mevcut temsillerini yüklenen içerikle
sağlanmaktadır. değiştirir. Genellikle hedef sunucuya dosya göndermek için kullanılır.
Güvenliği arttırmak için  DELETE metodu, bir URL tarafından verilen hedef kaynağın tüm mevcut
Sertifikalı HTTP, yani temsillerini kaldırır.
HTTPS kullanılır.
Varsayılan olarak FLASK yönlendirmesi GET isteklerine yanıt verir. Ancak
route() dekoratörüne parametre verilerek değiştirilebilir.

Atatürk Üniversitesi Açıköğretim Fakültesi 20


Python ile Web Programlama

URL yönlendirirken POST metodunun kullanımını kavramak için Komut


satırında C:\Python\py_root\ klasörü içerisinde login.html adında bir HTML
dosyası oluşturalım. Bu dosyanın içine Şekil 12.14’deki HTML kodlarını yazalım.
Tablo 12.14. login.html Dosyası

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>

Şimdi de, daha önce açmış olduğumuz ve WSGI_HANDLER olarak


tanımladığımız merhaba_dunya.py dosyasını açalım ve içindeki Python program
kodunu Tablo 12.15’deki kod ile değiştirelim.
Tablo 12.15. POST ve GET Kullanımı

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:

Atatürk Üniversitesi Açıköğretim Fakültesi 21


Python ile Web Programlama

18. kullanici = request.args.get('adi')


19 return redirect(url_for('success_get', adi = kullanici))
20.
21. if __name__ == '__main__':
21. app.run(debug = True)

C:\Python\py_root\login.html dosyasını Şekil 12.11’de görüldüğü gibi


herhangi bir internet tarayıcısı ile açıp metin alanına flask yazalım. Gönder
düğmesini tıkladığımızda sonuç Şekil 12.12’deki gibi olur.

GET, belirli bir Şekil 12.11. POST ve GET Kullanımı Örneği


kaynaktan veri istemek
için, POST ise, bir
kaynağı
oluşturmak/güncelleme
k amacıyla bir sunucuya
veri göndermek için Şekil 12.12. POST ve GET Kullanımı örneği Sonuç Ekranı
kullanılır.
http://localhost/login adresi, login() fonksiyonuna yönlendirildiğinden ve
adi olarak tanımlanan form nesnesi, login.html dosyasında metot POST olarak
tanımlandığından; veriyi, kullanici = request.form[‘adi’] durumuna göre alır.

• py_root klasöründeki login.html dosyasında POST metodunu GET


Bireysel Etkinlik

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

Atatürk Üniversitesi Açıköğretim Fakültesi 22


Python ile Web Programlama

formatında Merhaba Dünya yazdırır. Bununla birlikte, Python kodundan HTML


içeriği oluşturmak; özellikle değişken veriler ve koşul veya döngüler gibi Python dili
öğelerinin konulması gerektiğinde çok zahmetlidir. Bu, HTML'den sık sık kaçmayı
gerektirir. Böyle durumlarda Flask’ın temel olarak aldığı Jinja2 şablon motoru
kullanılır. Fonksiyon içerisine sabit HTML kodu yazmak yerine, render_template()
fonksiyonu ile dışarıda oluşturulmuş bir HTML dosyası kullanılabilir.
Tablo 12.16. HTML 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)

Dışarıdaki bir HTML dosyasını kullanmak için önce C:\Python\py_root


klasörünün içinde templates klasörü oluşturalım. Sonra, boş bir HTML dosyası
açalım ve içine Şekil 12.17’deki kodu yazıp merhaba.html olarak oluşturduğumuz
templates klasörünün içine kaydedelim. render_template() fonksiyonu, varsayılan
olarak kök klasörünün içindeki templates klasörünü taradığı için dâhil edeceğimiz
HTML dosyalarının bu klasör içinde barındırılması gerekmektedir.
Flask, öndeğer olarak
Tablo 12.17. merhaba.html Şablon(Template) Dosyası
uygulama klasörü
içindeki templates adlı Python Komutları
alt dizindeki şablonları 1. <!doctype html>
arar. 2. <html>
3. <body>
4.
5. <h1>Merhaba {{ isim }}!</h1>
6.
7. </body>
8. </html>

Web Şablon Sistemi, değişken verinin dinamik olarak kullanılabileceği bir


HTML kodunun oluşturulması demektir. Web Şablon Sistemi’nde şablon motoru,
veri kaynağı ve şablon işleyici bulunur. Flask; Jinja2 şablon motorunu kullanır.

Atatürk Üniversitesi Açıköğretim Fakültesi 23


Python ile Web Programlama

Tablo 12.18. render_template() Fonksiyonu Kullanımı

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)

http://localhost/py/merhaba/Guido adresi ziyaret edildiğinde, Python


program kodu renter_template() fonksiyonu aracılığıyla merhaba.html dosyasını
programa dâhil etti ve sayfa içindeki değişken olan {{ adi }} değerinin yerine
dinamik olarak adres de belirtilen Guido ismini atadı.

Şablonlar, statik HTML


sayfalarının yanı sıra
dinamik HTML sayfaları
için de yer tutan
dosyalardır.

Şekil 12.13. Python’da Şablon Kullanım Örneği Sonuç Ekranı

Atatürk Üniversitesi Açıköğretim Fakültesi 24


Python ile Web Programlama

•PYTHON İLE WEB PROGRAMLAMA


•Python sunucu taraflı çalışan bir programlama dilidir ve Python ile bir web
uygulaması oluşturmak için bu dilin yanı sıra HTML (Hypertext Markup
Language, Hiper Metin İşaretleme Dili), CSS (Cascading Style Sheets,
Basamaklı Stil Şablonları) ve JavaScript gibi bütün tarayıcıların desteklediği ve
istemci tarafında çalıştırılabilir olan dilleri de bilmek gerekir.
Özet
•PYTHON VE WEB
•Web üzerinde çalışan bir Python uygulaması geliştirmek için güncel işletim
sistemi olan ve Python programlama dilinin yüklü olduğu bir bilgisayar,
metin editörü, web servisi ve web çerçevesine ihtiyaç vardır.
•PYTHON VE IIS
•Windows işletim sisteminin bir uygulaması olan Internet Information
Services'de Python uygulamasının çalışabilmesi için bazı ayarların yapılması
gerekir. py dosya uzantısının tanıtılması, CGI desteğinin yüklenmesi, kök dizin
ve sanal uygulama oluşturulması bunlardan bazılarıdır.
•PYTHON İLE İLK UYGULAMA
•Python programlama dilinde print komutu tırnak içinde yazılan metnin
ekrana basılmasını sağlar. merhaba_dunya.py adında bir dosya oluşturup bu
dosyanın içine print("Merhaba Dünya!") yazıp bunu internet tarayıcımızda
görüntülediğimizde Python ile ilk uygulamamız yazılmış olacaktır.
•PYTHON VE FLASK
•Python programlama dili ile web üzerinde uygulama yapmak için genellikle
çerçeve yapı kullanılır. Çerçeve yapı; herhangi bir programlama dilinde
üzerine program yazabileceğiniz hazır yapılar olarak tanımlanabilir.
•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.
•Flask Kurulumu
•Flask, iki farklı şekilde kurulabilir. Birincisi açık kaynak kodu indirip el ile
kurulum yapmaktır. İkincisi pip komutu kullanarak kurulum yapmaktır. Web
sunucusu ile Python arasında, WSGI ve FastCGI kullanarak köprü vazifesi
gören wfastcgi eklentisinin de kurulması gerekir.
•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.
•route() Dekoratörü
•Python, bir işlevi belirli bir adrese yönlendirmek için route() dekoratörünü
kullanır.
•Değişken Dönüştürme
•Python programlama dilindeki dönüştürülebilir veri türleri; string, int, float,
path ve uuid'dir.
•Benzersiz URL'ler
•Werkzeug kütüphanesi, Python programlama dilinde oluşturulan URL'lerin
benzersiz olmasını sağlar
•Şablonlar (Templates)
•Belirli bir URL'ye bağlı bir fonksiyonun çıktısını, HTML biçimine döndürmek
mümkündür.Fonksiyon içerisine sabit HTML kodu yazmak yerine,
render_template() fonksiyonu ile dışarıda oluşturulmuş bir HTML dosyası
kullanılabilir.

Atatürk Üniversitesi Açıköğretim Fakültesi 25


Python ile Web Programlama

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

2. Web üzerinde çalışan bir Python uygulaması geliştirmek için


aşağıdakilerden hangisi gerekli değildir?
a) Python programlama dilinin en son sürümünün kurulu olduğu bir
bilgisayar.
b) Program kodlarının yazılabileceği tümleşik yazılım geliştirme ortamı
c) Web servisi
d) Web çerçevesi
e) İnternet bağlantısı

3. Aşağıdakilerden hangisi Python programlama dili için yazılmış bir çerçeve


yapısı değildir?
a) Flask
b) Laravel
c) Django
d) Tornado
e) Bottle

4. Aşağıdaki Python komutlarından hangisi hatasız çalışır?


a) Print ("\Merhaba Dünya\")
b) print ("\Merhaba Dünya"\)
c) print ("Merhaba Dünya\")
d) print ("\Merhaba Dünya")
e) print (Merhaba Dünya)

5. Aşağıdakilerden hangisi çerçeve yapıların sağladığı avantajlardan biri


değildir?
a) Derleme süresini minimuma indirir.
b) Daha basit test etme ve hata ayıklama imkânı verir.
c) Her şeyi sıfırdan yazmak gerekmez, bu nedenle hata yapma riski
azalır.
d) Açık ve kolay uyarlanabilir bir yapısı vardır.
e) İstenirse ekleme yapılıp genişletilebilir.

Atatürk Üniversitesi Açıköğretim Fakültesi 26


Python ile Web Programlama

6. Flask çerçevesini kullanabilmek için aşağıdakilerden hangisi gerekli


değildir?
a) pip komutu ile kurulum yapılması.
b) Python programının bilgisayara yüklenmiş olması.
c) Python kodunun içine “from flask import Flask” satırının en başa
eklenmesi.
d) Flask eklentisinin bilgisayarın işletim sistemine tanıtılmış olması.
e) Python program yolunun işletim sisteminde tanıtılmış olması.

Tablo 12.19. 7.Soru İçin Python Program Kodu

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()

7. Tablo 12.19’da verilen Python programı, yerel bir bilgisayarda çalışan


Internet Information Services web sunucusuna ait sanal py klasöründe
oluşturulmuştur. İnternet tarayıcısından http://localhost/py/ adresine
gidildiğinde ekrana aşağıdakilerden hangisi basılır?
a) 'Yeni Dizin Yapısından Merhaba Dünya!'
b) Yeni Dizin Yapısından Merhaba Dünya!
c) 'IIS üzerinden Merhabalar!'
d) IIS üzerinden Merhabalar!
e) Not Found (Dosya Bulunamadı.)

8. Aşağıdakilerden hangisi Flask çerçevesinde bulunan ve fonksiyon içerisine


sabit HTML kodu yazmak yerine dışarıda oluşturulmuş bir HTML dosyası
kullanılmasını sağlayan fonksiyondur?
a) render_template()
b) url_for()
c) route()
d) escape()
e) add_url_rule()

Atatürk Üniversitesi Açıköğretim Fakültesi 27


Python ile Web Programlama

9. Aşağıdakilerden hangisi HTTP (Hypertext Transfer Protocol) tarafından


veri iletişiminde kullanılan metotlardan biri değildir?
a) GET
b) PUT
c) SELECT
d) POST
e) HEAD

I. İnternet tarayıcıları Python programlama dilini direk çalıştıramaz.


II. Python sunucu taraflı çalışan bir programlama dilidir.
III. Python uygulaması geliştirmek için bir web servisi (Apache, IIS vb.)
şarttır.
10. Yukarıda Python programlama dili ile ilgili verilen bilgilerden hangisi veya
hangileri doğru ifadelerdir?
a) Yalnız I
b) I, II
c) Yalnız II
d) I,III
e) II, III

Cevap Anahtarı
1.c, 2.e, 3.b, 4.d, 5.a, 6.d, 7.e, 8.a, 9.c, 10.b

Atatürk Üniversitesi Açıköğretim Fakültesi 28


Python ile Web Programlama

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.

Atatürk Üniversitesi Açıköğretim Fakültesi 29

You might also like