Herkese selam, ben Suppressor. Bugün sizlere Python'ın mikro web framework'ü olan Flask framework'ünü anlatacağım.
Flask, Python programlama dilinin çatısı altında bulunan, web geliştirme ve web uygulamaları için kullanılan kolay ve basit yapıda bir mikro web framework'üdür. Flask'e "mikro" web framework denmesinin sebebi, minimal ve hafif yapısıdır. Flask, geliştiricilere yalnızca temel araçları sunar ve daha karmaşık özellikler gerektiğinde çeşitli kütüphaneler ile genişletilebilir.
Flask Url Yapısı Ve Routing
Flask in temel yapısı ve yönelndirmesine bakarsak En sade anlatımı ile bilgisayarımızdan uygulamamıza bir istek gider ve attığımız isteğin sonucu bize gelen yanıt tarayıcımıza görüntülenir. Flask Uygulamasını Başlattığımızda Bide local adresimizde bir sunucu ayağa kaldırır ve işlemlerimiz artık oradan ilerletiriz.
Bu adresi flask otomatik olarak belirler. ve uygulamayı başlattığımızda bize bu adresi gösterir
Routing Ve Syntax
Syntax:
Yapılacak İşlem: (app.route)
Fonksiyon Tanımlanması def route() :
Yapılacak İşlem (return merhaba)
genel olarak syntax bu şekilde.
Python:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def route():
return "Merhaba"
if name == "main":
app.run()
Flask Kütüphanesinin programa eklenmesi ve flask nesnesinin oluşturulması
Python:
from flask import Flask
app = Flask(__name__)
Ardından Flask'e ne olduğunda hangi fonksiyonu çalıştırmasını gerektiğini söylüyoruz bunun için
"route" ~ "dekoratörünü" kullanıyoruz (dekoratörler python'da özel fonksiyonlardır )
Python:
@app.route("/")
def route():
return "Merhaba"
Bu noktada kök dizine gidiliğinde yani direkt ana url ye gidilidğinde bize "Merhaba"
gibi bir yanıt alacağız
Bir diğer örnek /admin dizininden örnek vereceğim
Template
Template'ler, kısaca tarayıcınıza HTML, CSS, JS gibi dilleri yorumlayıp kullanıcıya göstermek için var olmuş yapılar. Üst tarafta gördüğünüz gibi sadece ekrana string ifadeler yerleştirebildik. Ancak template'leri kullanarak HTML, CSS, JavaScript kodlarımızı tarayıcıya yorumlatabileceğiz. Kod aşamasına geçmeden önce, Flask uygulamamızın bulunduğu dizine "templates" adında bir klasör oluşturmamız gerekiyor. Flask, varsayılan olarak yorumlayacağı template'leri bu klasörden çekiyor. Ardından içerisine "index.html" isimli dosyayı oluşturuyorum. Ek olarak kütüphane kısmında render_template'i eklemeniz gerekiyor. Onu aşağıdaki kodda görebilirsiniz.
gibi bir yanıt alacağız
Bir diğer örnek /admin dizininden örnek vereceğim
Template
Template'ler, kısaca tarayıcınıza HTML, CSS, JS gibi dilleri yorumlayıp kullanıcıya göstermek için var olmuş yapılar. Üst tarafta gördüğünüz gibi sadece ekrana string ifadeler yerleştirebildik. Ancak template'leri kullanarak HTML, CSS, JavaScript kodlarımızı tarayıcıya yorumlatabileceğiz. Kod aşamasına geçmeden önce, Flask uygulamamızın bulunduğu dizine "templates" adında bir klasör oluşturmamız gerekiyor. Flask, varsayılan olarak yorumlayacağı template'leri bu klasörden çekiyor. Ardından içerisine "index.html" isimli dosyayı oluşturuyorum. Ek olarak kütüphane kısmında render_template'i eklemeniz gerekiyor. Onu aşağıdaki kodda görebilirsiniz.
Python:
from flask import Flask, render_template
app = Flask(name)
@app.route("/template")
def index():
return render_template('index.html')
if name == "main":
app.run(debug=True)
Bir HTML'i kullanıcıya göstermek istiyorsak, render_template() fonksiyonunu kullanıyoruz ve "templates" klasöründeki istediğimiz HTML dosyasının adını yazıyoruz.
Örnek HTML Kodu:
Örnek HTML Kodu:
HTML:
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Arge Ekibi</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
<style>
body{
background-color: black;
text-align: center;
font-style: italic;
}
h6{
color: rgb(220 38 38);
}
p{
color: rgb(132 204 22);
}
</style>
<p>Flask</p>
<br>
<h6>Template</h6>
</body>
</html>
Flask uygulamamızdan Html dosyasına veri gönderimi
Jinja Syntax
Koşullu İfadeler
Döngüler
Döngüler, koşullu ifadeler vb. için:
Değişkenlerin gösterilmesi için:
Yukarıda index dosyasını kullanıcıya gösterebilmeyi öğrenmiştik. Peki ya bizim yazdığımız bir Flask uygulamasından kullanıcıya veri göndermemiz gerekiyorsa? Şimdi ilk olarak bunu yapmaya bakalım.
Yine üstte yazdığım kodları yazıp aynı şekilde render_template('index.html') yazıyorum. Ama bu sefer bir farklılık var: burada istediğiniz ismi yazabilirsiniz, bir adet parametre vermemiz gerekiyor. İsminin ne olduğunun bir önemi yok, ben sayı parametresini verdim.
Bunu üst satırlarda da tanımlayabilirsiniz, direkt burada da:
HTML tarafına geldiğimizde ise bu değişken ismini {{ parametre_ismi }} içerisinde belirtmeniz gerekmekte.
Döngüler, koşullu ifadeler vs:
İlk olarak syntaxlarına bakalım:
Sayı diye bir değişken olup olmadığını kontrol eder, yani bir değerin var olup olmadığını kontrol edebilirsiniz:{% if sayı %}
"Gelen değer 20'den büyük ise" gibi bir koşul sunar. Mantıksal operatörler de kullanılabilir (==, >, <, vs.):{% if değer > 20 %}
If koşulunun çalışmadığı zaman devreye girer:{% else %}
If koşulu çalışsın ya da çalışmasın, else çalışsın veya çalışmasın, kod bittiğinde nereye koyulduysa en son denilen görevi yapar. Yani en son yaptırmak istediğiniz şeyi bu bloğa yazabilirsiniz:{% endif %}
Örneğin, data diye bir değişken tanımladınız ve değeri 10 oldu. Bunu HTML tarafında yazdırmak istiyorsunuz. Bunun için normalde syntaxı aynı:{% for sayılar in data %}{{ sayılar }}
For döngüsü bittiği zaman kullanılır ve yine döngü bittiğinde yapılması isteneni yazar. For döngüsünü başlatıldığı zaman endfor kullanımı zorunludur. Herhangi bir işlem yaptırmak istemiyorsanız pass veya continue kullanabilirsiniz:{% endfor %}pass
Syntaxlarına gelirsek, öyle :, ; falan şeytan icadı şeylere gerek yok:
Jinja Syntax
Koşullu İfadeler
Döngüler
Döngüler, koşullu ifadeler vb. için:
Rich (BB code):
{% %}
Değişkenlerin gösterilmesi için:
Rich (BB code):
{{ }}
Yukarıda index dosyasını kullanıcıya gösterebilmeyi öğrenmiştik. Peki ya bizim yazdığımız bir Flask uygulamasından kullanıcıya veri göndermemiz gerekiyorsa? Şimdi ilk olarak bunu yapmaya bakalım.
Yine üstte yazdığım kodları yazıp aynı şekilde render_template('index.html') yazıyorum. Ama bu sefer bir farklılık var: burada istediğiniz ismi yazabilirsiniz, bir adet parametre vermemiz gerekiyor. İsminin ne olduğunun bir önemi yok, ben sayı parametresini verdim.
Bunu üst satırlarda da tanımlayabilirsiniz, direkt burada da:
Rich (BB code):
return render_template("index.html", sayı=15)
HTML tarafına geldiğimizde ise bu değişken ismini {{ parametre_ismi }} içerisinde belirtmeniz gerekmekte.
Döngüler, koşullu ifadeler vs:
İlk olarak syntaxlarına bakalım:
Sayı diye bir değişken olup olmadığını kontrol eder, yani bir değerin var olup olmadığını kontrol edebilirsiniz:{% if sayı %}
"Gelen değer 20'den büyük ise" gibi bir koşul sunar. Mantıksal operatörler de kullanılabilir (==, >, <, vs.):{% if değer > 20 %}
If koşulunun çalışmadığı zaman devreye girer:{% else %}
If koşulu çalışsın ya da çalışmasın, else çalışsın veya çalışmasın, kod bittiğinde nereye koyulduysa en son denilen görevi yapar. Yani en son yaptırmak istediğiniz şeyi bu bloğa yazabilirsiniz:{% endif %}
Örneğin, data diye bir değişken tanımladınız ve değeri 10 oldu. Bunu HTML tarafında yazdırmak istiyorsunuz. Bunun için normalde syntaxı aynı:{% for sayılar in data %}{{ sayılar }}
For döngüsü bittiği zaman kullanılır ve yine döngü bittiğinde yapılması isteneni yazar. For döngüsünü başlatıldığı zaman endfor kullanımı zorunludur. Herhangi bir işlem yaptırmak istemiyorsanız pass veya continue kullanabilirsiniz:{% endfor %}pass
Syntaxlarına gelirsek, öyle :, ; falan şeytan icadı şeylere gerek yok:
Rich (BB code):
{% if sayı %}Yapılması_İstenen_Kod
{% else %}Yapılması_İstenen_Kod
{% endif %}Yapılması_İstenen_Kod
Böyle, diğer koşulun altına geçmeyene kadar istediğiniz her şeyi yazabilirsiniz.
Örnekler
İf kontrolü ile gelen değerin HTML'e yazdırılması
Python:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def main():
return render_template("index.html", sayı=5)
if __name__ == "__main__":
app.run(debug=True)
HTML
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Arge Flask App</title>
</head>
<body>
{% if sayı %}
<p>{{ sayı }}</p>
{% endif %}
</body>
</html>
ELSE KULLANIMI
py
Python:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def main():
return render_template("index.html", deneme="Naber")
app.run(debug=True)
HTML
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Arge Flask App</title>
</head>
<body>
{% if sayı %}
<h1>{ sayı }</h1>
{% else %}
<p>Bişey Olmadı</p>
{% endif %}
</body>
</html>
ENDİF KULLANIMI
PY
PY
Python:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def main():
return render_template("index.html", sayı=5)
app.run(debug=True)
HTML
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Arge Flask App</title>
</head>
<body>
{% if sayı %}
<p>{{ sayı }}</p>
{% endif %}
<p>İşlem Başarı İle Tamamlandı</p>
</body>
</html>
Tabii, ee sadece sayı mı gönderebiliyoruz diyecekseniz, hayır. Örneğin, THT'ye bir istek atalım ve status kodunu yazdıralım.
PY
PY
Python:
from flask import Flask, render_template
import requests
app = Flask(__name__)
r = requests.get(url="https://turkhackteam.org/")
@app.route("/")
def main():
return render_template("index.html", status=r.status_code)
app.run(debug=True)
HTML
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Arge Flask App</title>
</head>
<body>
{% if status %}
<h1>{{ status }}</h1>
{% endif %}
</body>
</html>
Örnek For:
Python:
from flask import Flask, render_template
app = Flask(__name__)
numaralar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
@app.route("/")
def main():
return render_template('index.html', sayılar=numaralar)
if __name__ == "__main__":
app.run(debug=True)
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Arge Flask App</title>
</head>
<body>
{% for donguler in sayılar %}
<p>{{ donguler }}</p>
{% endfor %}
</body>
</html>
Şu anlık bu kadardı. İlerleyen günlerde veri tabanı işlemleri, veri gönderme, API yapımı gibi konuları da ekleyip konuyu güncelleyeceğim.
Son düzenleme:







