Python ile web geliştirmeye adım attığımız bu ilk dersimizde, bir web uygulama geliştirme iskeleti(framework) olan Flask kurulumunu inceleyeceğiz ve adetten olduğu üzere ilk küçük projemizi geliştirerek Flask ile oluşturulmuş bir web sayfasını ziyaret edeceğiz.

Flask jinja2 adı verilen bir şablon yapısını kullanır. Bu şablon yapısı, HTML içine Python kodları yerleştirmeye izin verir.

Kullanıcılar bir web adresini tarayıcıya yazıp web sitesine girmek istediklerinde bu istek web sunucusundaki bir fonksiyonu çalıştırır. Bu fonksiyon içindeki Python kodları ise bir http cevabı(response) döndürür. Bu http cevabında bahsettiğimiz jinja2 HTML şablonu yer alır. Bu sayede kullanıcı web sayfasını ziyaret etmiş olur.

Şimdi Flask kurulumunu yapıp söylediklerimizi örnekleyerek ve görselleştirerek daha anlaşılır hale getirelim. Flask kurulumu Python’daki herhangi bir harici modülün kurulumu kadar basit. Terminal pencerenizde Flask modülünün kurulum komutunu vermeniz yeterlidir;

$ pip install flask

Bu komut sonucunda terminal penceremiz flask ve bağımlı paketlerinin kurulduğu bilgisini verir;

Successfully installed Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 flask-1.1.2 itsdangerous-1.1.0

Şimdi ilk flask kodlarımızı yazmaya başlayalım. Önce bir proje klasörü oluşturalım ve içinde webprojesi.py isimli bir python dosyası oluşturarak VSCode editöründe ya da kullandığınız herhangi bir kod ya da metin editöründe açalım ve ilk iş olarak flask modülünden Flask sınıfını dosyamıza ekleyelim;

from flask import Flask

Bu sınıftan üzerinde çalışmak için bir nesne oluşturalım;

ilkproje = Flask(__name__)

Burada sınıftan oluşturduğumuz nesneye __name__ parametresini vermemizin nedeni; daha önce Modüller konusunda belirttiğimiz gibi bir python dosyasını bir başka python dosyasına modül olarak eklediğimizde otomatik olarak içindeki fonksiyonların çalıştırılmasının önüne geçmektir. Burada da Flask() sınıfına ait bir nesne oluşturulduğunda otomatik olarak bu sınıf içindeki metodların çalıştırılmasının önüne geçilmiş ve kontrol ele alınmış oluyor.

Peki, öyleyse bu flask projemizi biz nasıl çalıştırıp, web sayfasında ziyaret edilebilir hale getireceğiz? Bunun için de, flask modünden run() metodunu kullanacağız.

ilkproje.run()

Ancak, yine bu python dosyamızı bir başka dosya içine eklememiz gerektiği durumda otomatik olarak çalıştırılmasının önüne geçmek içi çalıştırılma işlemini bir koşula bağlı hale getireceğiz;

if __name__ == "__main__";
    ilkproje.run(debug=True)

Çalıştırılırken hata ayıklama modunu da parametre olarak ekleyip True olarak belirledik ki, proje daha geliştirme aşamasında olduğu için hatalarımızı görelim. Ancak yayınlanırken bu parametreyi kaldırmayı unutmayın!

Kodlarımızın tam hali ise;

from flask import Flask

ilkproje = Flask(__name__)

if __name__ == '__main__':
    ilkproje.run(debug=True)

Şimdi terminal penceresinden bu python dosyamızı çalıştırırsak;

$ python3 webprojesi.py

terminal penceresinde şu çıktıların oluştuğunu görürsünüz;

* Serving Flask app "webprojesi" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 232-480-724

Burada yer alan http://127.0.0.1/5000/ adresi flask projenizi web tarayıcısında ziyaret edebileceğiniz lokal web sunucunuzun adresidir. Dilerseniz üzerine tıklayarak, dilerseniz bir web tarayıcısı açıp adres satırına yazarak ziyaret edebilirsiniz.

Ancak gördüğünüz gibi talep ettiğimiz adreste herhangi bir web sayfası görüntülenmedi. Çünkü henüz yapmamız gerekenleri tamamlayıp jinja2 HTML şablonlarını ve içeriğimizi eklemedik.

Ama en azından flask projemizin kullanılabilir ve yerel web sunucumuzun erişilebilir olduğunu test etmiş olduk.

Şimdi sıra bu eksiklerimizi gidermeye geldi. Web sunucumuz bize ulaşmak istediğimiz web sayfasının olmadığı ile ilgili bir mesaj görüntüledi. Çünkü erişmeye çalıştığımız kök dizin adresinde bu isteğe cevap verebilecek bir HTML sayfası ya da flask fonksiyonu yok. Flask’da her bir web adresine karşılık bir fonksiyon bulunur.

Flask’da web adresleri bir dekoratör(decorator) yardımıyla ve route() metoduyla tanımlanır. Genel şablonu şu şekilde olup;

@nesneadı.route("webadresi")

Projemiz için kök dizinimizi işaret eden anasayfa tanımı da bu metodla şu şekilde tanımlanır;

@ilkproje.route("/")

Python’da fonksiyonlarımızın işlevselliğini artıran dekoratörlerimizin altına fonksiyonumuzu ekliyoruz. Biz de bu anasayfa yolunu gösteren dekoratörün altına kullanıcılar tarayıcıda web projemizi ziyaret etmek için adresini girdiklerinde çalıştırılacak olan fonksiyonu yazmalıyız. Bu fonksiyon bir HTML sayfası da döndürebilir, jinja2 HTML şablonu da döndürebilir ya da basit bir şekilde metin de döndürebilir. Henüz HTML şablonlarıyla çalışma aşamasına geçmediğimiz için fonksiyonumuz şimdilik bir metin döndürsün.

from flask import Flask

ilkproje = Flask(__name__)

@ilkproje.route("/")
def anasayfa():
    mesaj = "İlk Flask Sayfamıza Hoş Geldiniz!" 
    return mesaj

if __name__ == '__main__':
    ilkproje.run(debug=True)

Dosyamızı kaydedip, terminal penceresinde tekrar çalıştırarak web tarayıcımızda http://127.0.0.1:5000/ adresini ziyaret ettiğimizde;

artık sayfanın bulunamadığı uyarısını değil, fonksiyonumuzun döndürdüğü değeri görüyoruz.

Benzer şekilde yeni sayfalar için yeni fonksiyonlar oluşturarak bir web sitesi yapısı kurmamız gayet mümkündür. Örneğin;

from flask import Flask

ilkproje = Flask(__name__)

@ilkproje.route("/")
def anasayfa():
    mesaj = "İlk Flask Sayfamıza Hoş Geldiniz!" 
    return mesaj

@ilkproje.route("/iletisim")
def iletisim():
    metin = """
    İletişim<br/>
    <p>
    Oben SEVEN<br/>
    Tel: 0 555 555 55 55<br/>
    E-mail: obenseven@obenseven.com.tr</p>
    """
    return metin

if __name__ == '__main__':
    ilkproje.run(debug=True)

Artık iletisim isimli bir web adresimizde daha var ve burada metnimizin içinde biçimlendirme için HTML etiketleri de kullandığımıza dikkatinizi çekerim. Acaba bu etiketler metin gibi mi yazılacak web sayfasında yoksa HTML olarak yorumlanacak mı? Görmek için yeni web adresimizi http://127.0.0.1:5000/iletisim ziyaret edelim;

İşte Flask ile web adreslerimizi oluşturma ve bu adreslerde içerik görüntüleme mantığı bu şekilde özetlenebilir.

 

Burada yer alan kod örneklerini şu adreste inceleyebilirsiniz;

https://repl.it/@ObenSEVEN/flaskagiris