Python Flask ile Web Geliştirme Rehberi
Python ile uygulama geliştirme denildiğinde akla genellikle konsol uygulamaları, veri uygulamaları ve yapay zeka gelse de, Python’un yoğun olarak kullanıldığı alanlardan biri de Web geliştirme olarak öne çıkmaktadır. Web dünyasında JavaScript veya PHP kadar yaygın olmasa da, Python programlama dili, gelişmiş internet siteleri geliştirmek için yaygın olarak kullanılan iki framework’e ev sahipliği yapmaktadır. Bunlardan en bilineni Django, diğeri ise Flask framework’üdür.
Flask framework’ü ile, JavaScript’teki Express.js kütüphanesine benzer şekilde backend sistemleri oluşturup kendinize çeşitli büyüklükte web uygulamaları geliştirmeniz mümkündür. Üstelik arka planda tuttuğunuz değişkenleri sayfanızda kullanarak sayfayı daha dinamik hale getirebilirsiniz. Gelin, Python Flask nedir ve nasıl web geliştirme yapılır sorularını detaylıca yanıtlayalım.
Python Flask Nedir?
Python Flask teknolojisi, günümüzün en yaygın programlama dillerinden biri olan Python için özel olarak geliştirilmiş bir web backend kütüphanesidir. 2010 yılında Python dünyasına adım atan Flask framework’ünün temelini Werkzeug ve Jinja2 kütüphaneleri oluşturmaktadır. Flask, programcıların olabildiğince basit bir backend sistemi kurmalarını sağlamak amacıyla geliştirilmiştir, ancak aynı zamanda son derece dinamik internet uygulamaları oluşturabilecek kadar da güçlü bir yapıya sahiptir.
Flask, günümüzde Python ile web geliştirme alanına adım atan yazılımcıların vazgeçilmez bir dostu ve farklı ölçekteki web projelerinde kolaylıkla kullanılabilecek güçlü bir teknoloji olarak Python ekosistemindeki popülerliğini sürdürmektedir.
Flask’ın Temel Özellikleri
Python Flask kütüphanesi, kolayca entegre edilebilen bir backend sistemi olmanın yanı sıra, son derece güçlü bir iskelet yapısı oluşturmaya olanak tanıyan bir araç olarak karşımıza çıkmaktadır. Bu kütüphane ile bir yazılımcının gerçekleştirebileceği başlıca işlemler şunlardır:
| Web uygulamaları ve API geliştirme |
| Rotalama ve istek yönetimi |
| Değişkenlerle dinamikleştirilebilen “template” sayfalarla ön yüz oluşturma |
| Temel Python söz dizimiyle algoritma işlemleri |
| Çerez yönetimi |
| RESTful API geliştirme |
| Uygulamayı yayına alınabilir şekilde üretme |
Bu özellikler göz önüne alındığında, Python Flask kütüphanesinin bir web geliştiricinin ihtiyaç duyacağı tüm temel gereksinimleri Python dilinin getirdiği kolaylıkla birlikte sunduğu açıktır.
Flask Kurulumu
Bilgisayarınıza Python Flask kütüphanesini yüklemek için, sisteminizde Python programlama dilinin kurulu olduğunu varsayarsak, aşağıdaki komut Flask kütüphanesini bilgisayarınıza yüklemek için yeterli olacaktır:
pip install Flask
Bu komut, yaklaşık 1 dakika sürebilen bir kurulum sürecini başlatır. Kurulumun hemen ardından Flask kütüphanesi tüm özellikleriyle kullanıma hazır hale gelir.
İlk Flask Uygulamamızı Oluşturmak
Yazımızın bu bölümünde, genel hatlarıyla Flask kütüphanesinin kullanımını ele alacağız. Burada yazacağımız tüm kodlar için öncelikle app.py isminde bir Python modülü oluşturacak ve Flask kütüphanesini kodumuza dahil edeceğiz.
from flask import *
“Hello World” Uygulaması
Programlama dünyasının belki de en bilindik kavramlarından biri olan “Hello World” cümlesini, bu kez Flask aracılığıyla tarayıcı ekranımızda yazdıracağız. Bunun için öncelikle bir Flask uygulaması oluşturuyoruz:
app = Flask(__name__)
Buradaki __name__ parametresi dikkatinizi çekmiş olabilir. Bu parametre özel bir değişkendir ve kodunu yazdığımız modülün adını tutar. Ana program olarak çalışan bir Python kodunda bu değişken __main__ değerini alırken, bir yan uygulama/modül olarak çalışan bir Python kodunda bu değişken, o modülün adını (örneğin app) alır.
Bu satırın altında, ilk rotamızı oluşturuyoruz. Bu rota, web dünyasında “index” olarak bilinen / rotasıdır. Bu rotayı uygulamamıza şu şekilde dahil ediyoruz:
@app.route('/')
def hello_world():
return 'Hello, World!'
Flask kütüphanesinde rota tanımlamak için @app.route() fonksiyonunu kullanırız ve bu fonksiyona parametre olarak rotanın adını veririz. Bu satırın hemen altında, bu rotaya denk gelecek olan Python fonksiyonunu tanımlarız ve bu örnek için bu fonksiyona 'Hello, World!' metinsel değerini döndürürüz. Bu kod bloğunun altında, uygulamamızın çalıştırılmasını sağlayan şu ifadeyi ekleriz:
app.run()
Kodumuzu kaydedip çalıştırdığımızda, konsolda aşağıdaki gibi bir görüntüyle karşılaşmamız beklenir:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Eğer bu çıktıyı görüyorsanız, kodunuz doğru çalışıyor demektir. Buradaki Running on ifadesiyle başlayan satırın devamındaki adres, uygulamamızın bilgisayarımızda (localhost) hangi portta yayına girdiğini gösterir. Bu uygulamaya erişmek için yapmanız gereken şey, bir tarayıcı sekmesi açıp adres çubuğuna localhost:5000 yazmaktır. Yazdığımız koda göre karşımıza çıkması gereken ekran şu şekildedir:
Hello, World!
Eğer buradaki Hello, World! yazısı ekranda görünüyorsa, uygulamanız %100 doğru çalışıyor demektir.
Bir HTML Sayfasını Render Etmek
Python Flask, elbette ki bize HTML sayfalarını render ederek uygulamamızın ön yüzünde gösterme olanağı tanır. Uygulamamızda halihazırda bir rotamız olduğuna göre, bu rota için bir HTML sayfası hazırlayabiliriz. Bunun için, app.py dosyasının bulunduğu dizinde templates isminde bir klasör ve bu klasörün altında index.html isminde bir HTML dosyası oluşturmakla işe başlayabiliriz. Akabinde index.html dosyamızın içine aşağıdaki gibi bir kod eklemek işimizi görecektir:
<!DOCTYPE html>
<html>
<head>
<title>Flask Demo</title>
</head>
<body>
<h1>Hello, Flask!</h1>
</body>
</html>
Bu kodu kaydettikten sonra, app.py dosyamıza geri dönüp hello_world fonksiyonumuzun return 'Hello, World!' olan satırını aşağıdaki şekilde değiştiriyoruz:
return render_template('index.html')
Burada 'Hello, World!' yerine koyduğumuz render_template fonksiyonu, Flask kütüphanesinde “template” olarak adlandırılan HTML kaynak kodlarını o rotada render etmeye yarar. Bu kod, parametre olarak bu template içinde render edilecek ve işlenecek değişkenler alabilir, ancak ilk parametresi her zaman render edeceği HTML dosyasının adıdır. Bu dosyanın templates alt klasörü içerisinde bulunması, Flask kütüphanesi kullanan bir web uygulaması oluşturmak için bir gerekliliktir.
Tabii ki app.py veya index.html dosyalarımızda değişiklik yaptığımız zaman uygulamamızı kapatıp yeniden başlatmamız gerekir. Bu sorunu ortadan kaldırmak için app.run() olan satırı aşağıdaki kod bloğuyla değiştirmemiz yeterli olacaktır:
if __name__ == '__main__':
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.run(debug=True)
Bu değişiklikleri yapıp uygulamamızı yeniden başlattıktan sonra sayfamız aşağıdaki gibi görünecektir:
Hello, Flask!
Flask ile HTML sayfası renderlamayı öğrendikten sonra, günümüzde web geliştirme alanında oldukça faydalı olan bir özellik olan bir HTML sayfası içerisine başka bir HTML sayfası ekleme özelliğine geçelim.
Flask ile Bir Sayfaya Başka Bir Sayfa Eklemek
Bir web sayfasının içerisine başka bir web sayfası ekleme işlemi, PHP gibi dillerde ve günümüzdeki modern web framework’lerinde yerleşik olarak bulunan bir özelliktir. Bu özellik genellikle bir web sayfasını kolayca düzenlenebilen ve tekrar tekrar kullanılabilen üst bilgi, alt bilgi, ürün listesi gibi parçalara ayırarak geliştiricilere büyük kolaylık sağlar. Flask kütüphanesi, bunun için Jinja motorunu kullanarak bu parçalama işlemini kolaylaştırır.
Bunun için, parçaların normal HTML sayfalarından ayırt edilmesi adına, templates klasörünün içerisine bir adet partials klasörü oluşturup içine sayfamızın alt bilgisi mahiyetinde olacak bir footer.html dosyası ekliyoruz ve bu dosyanın içine aşağıdaki kodu yapıştırıyoruz:
<footer>
<p>Bu sayfanın alt bilgisidir.</p>
</footer>
Daha sonra index.html dosyamızın içerisine gelip </body> etiketinin hemen üstüne şu kod satırını yazıyoruz:
{% include 'partials/footer.html' %}
Bu satır, Flask/Jinja motorunun başka bir HTML dosyasını mevcut sayfanın içine gömme kodudur. Bir HTML sayfasını başka bir HTML sayfasına ekleme işlemi esnasında genelde app.py dosyası üzerinde herhangi bir değişiklik yapmanız gerekmez, ki bu örneğimizde de gerekmedi. Dosyalarımızı kaydedip uygulamamızı yeniden başlattığımızda (sayfanızın güncellenmediği durumda) karşımıza aşağıdaki gibi bir görüntü çıkması beklenir:
Hello, Flask!
Bu sayfanın alt bilgisidir.
Bu şekilde sayfamıza bir alt bilgi eklemiş olduk. Aynı şekilde sayfamıza bir üst bilgi, menü sayfası, feed sayfası veya ürün sayfası gibi parçalar da ekleyebiliriz. Tek yapmanız gereken, görece daha küçük HTML kodları yazıp index.html sayfanızın içine gömmek. Bu kodlarınızı <header>, <nav> ve <main> gibi etiketlerin arasında yazıp sayfanızın parçalarını oluşturabilirsiniz.
Flask ile Web İstekleri
Python Flask, @app.route yapıları içerisinde belirlediğiniz rotaların hangi HTTP isteklerini alacağını belirlemenize olanak tanır. Bunlardan en sık kullanılanları GET ve POST’tur.
Bunun için yapmanız gereken şey, @app.route('/rota_adı') olan yapınıza şu şekilde bir ekleme yapmaktır:
@app.route('/rota_adı', methods=['GET', 'POST']) # Hem GET, hem POST isteklerini almak için
Bu yapının altına yazacağınız fonksiyonda kullanmak üzere, bu yapıya erişimde gönderdiğiniz istek request.method değişkeni tarafından tutulur. Eğer sayfanızda bir form varsa ve POST isteğiyle bir sonraki sayfaya geçiş yapıyorsanız, geçiş yaptığınız sayfada bir önceki sayfadaki formdan alınan değerlere request.form['girdi_adı'] değişkeniyle ulaşabilirsiniz.
Sayfada Değişken Kullanımı
Flask framework’ünün temel aldığı Jinja motoru sayesinde web sayfanızda arka plandan gelen değişkenlerinizi yazdırıp kullanabiliyorsunuz. Değişkenleri yazdırma örneğimiz için index rotamız içerisinde val isminde bir değişken tanımlayalım ve buna herhangi bir isim verelim. Bu örneğimizde biz buna 3 değerini veriyoruz.
@app.route('/')
def hello_world():
val = 3
return render_template('index.html', val=val)
İlgili rota fonksiyonumuzda tanımladığımız veya bu fonksiyona tanıttığımız global değişkenlerimizi render_template fonksiyonumuza parametre olarak atayabiliyoruz. Buradaki parametre isminin değişken ismiyle aynı olması yazım ve kontrol kolaylığı için önemlidir, ancak zorunlu değildir. Burada önemli olan, burada parametre olarak tanımladığımız değişkeni (bu örnek için = ifadesinin solundaki val değişkeni) sayfanın içerisinde doğru şekilde kullanabilmektir. Bunu da şu şekilde yapıyoruz:
Val = {{ val }}
Buradaki çift süslü parantezler, içerisine yazılan değişkenin sayfada yazdırılmasına olanak tanır. val değişkenimizin değeri 3 olduğuna göre, sayfamızda oluşan görüntü şu şekilde olacaktır:
Hello, Flask!
Bu sayfanın alt bilgisidir.
Val = 3
Tabii ki değişkeni yazdırmak, Jinja motoru sayesinde yapabildiğimiz tek işlem değil. Buna ek olarak, sayfamızı daha da dinamik hale getirecek olan if koşulu ve for döngüsü de sayfamızın içine entegre edip kullanılabiliyor. Bu yapılar genelde bir değişkenin tanımlanması (sayfaya aktarılması halinde) sayfanın bir bölümünün yazdırılması ve aktarılan veri setlerinin tabloya aktarılması amacıyla kullanılır.
{% if kosul %}
...
{% endif %} # Flask Jinja if yapısı
{% for element in dizi %}
{{ element[0] }}
{{ element[1] }}
...
{% endfor %} # Flask Jinja for yapısı
Temel Python’dan farklı olarak Flask Jinja’da if ve for yapıları {% endif %} ve {% endfor %} blokları ile sonlandırılmak durumundadır. HTML sayfalarının gövde kısmının </body> etiketiyle bittiği göz önünde bulundurulursa, bu uygulamanın web sayfası içerisinde hangi kısımların dinamik olarak render edileceğinin kesin olarak belirtilmesi işlevine yaradığı açıktır. Hatta öyle ki, bu yapıları es kaza kapatmadığınız zaman Flask size bir hata mesajı fırlatacaktır.
Değişkene ek olarak, sayfanızda URL parametresi de kullanma imkanınız bulunmaktadır. Bunun için rota yapınızı şu şekilde ayarlamanız yeterlidir:
@app.route('/')
def hello_world_addon(url_addon):
val = 3
return render_template('index.html', val=val, url_addon=url_addon)
app.route içerisinde sol ve sağ oklar arasında belirttiğiniz değişken ismi, sayfada kullanabilmek için sizin bu rotaya karşılık gelen fonksiyonunuzda parametre olarak aynı isimle tanımlamanız gereken değişkene karşılık gelmektedir. Bu parametreyi kullanmanın en basit örneği ise bunu sayfada yazdırmaktır. Sayfamızın body etiketi içerisinde alt bilgi bloğunun üstünde şu şekilde bir değişiklik yapıyoruz:
<h1>Hello, Flask!</h1>
<p>Val = {{ val }}</p>
<p>Current URL = {{ url_addon }} # URL parametremizi yazdırdığımız satır</p>
Bunun etkisini görmek için tarayıcımızdaki adres çubuğunun sonuna /merhaba şeklinde bir ekleme yapalım. Alacağımız sonuç aşağıdaki gibi olacaktır:
Hello, Flask!
Bu sayfanın alt bilgisidir.
Val = 3
Current URL = merhaba
Python ile kolayca backend geliştirme yapabileceğimiz harika bir araç olan Flask, programcı dostu kullanımı, kolay, basit ancak güçlü mimarisi ve genel hafifliği ile Python ile web geliştirme dünyasının öne çıkan üyelerinden biridir. Saf Python söz dizimini kullanmaya, dolayısıyla Python ile normalde yapabileceğiniz her şeyi yapmaya olanak tanıyan Python Flask kütüphanesi, özellikle yapay zekanın yakın zamandaki yükselişi ile birlikte Django kütüphanesiyle beraber web dünyasında artan bir popülerliğe sahip olacak gibi görünmektedir.
Eğer Flask teknolojisinde ilerlemek isterseniz, bu yazıda anlatılanlara ek olarak hata yönetimi, formlarla detaylı çalışma, geliştirme ve yayın sunucuları gibi özellikleri üstünde hakimiyet kazanıp; Python, Web (HTML/CSS/JS) ve veritabanı alanlarında yetkin olduğunuzu kanıtlayan bireysel projeler oluşturmanız gerekecektir.




