- Katılım
- 7 Nis 2025
- Konular
- 367
- Mesajlar
- 780
- Çözümler
- 1
- Tepkime puanı
- 121
- Puan
- 93
- Konum
- İstanbul
- Web sitesi
- forumagel.com
Hazır Kod Bankası - Konu 20: Python Flask Web Framework Temelleri
Hazır Kod Bankası Serimizin Yirminci Konusu: Python Flask Web Framework!
Merhaba arkadaşlar! HTML, CSS, JavaScript ile web ön yüzünü; PHP ve Python ile web arka yüzünü ve Veritabanları ile veri saklamayı gördük. Ancak gerçek dünyadaki web siteleri ve uygulamaları genellikle bu dilleri tek başlarına kullanarak değil, Web Frameworkleri aracılığıyla geliştirilir. Frameworkler (çatılar), web geliştirme için gereken birçok temel bileşeni (URL yönlendirme, veritabanı entegrasyonu, güvenlik, şablonlama vb.) standartlaştırır ve geliştirme sürecini hızlandırır.
Bu konuda, Python'ın popüler, hafif (microframework) ve öğrenmesi nispeten kolay bir web framework'ü olan Flask'ın temellerine giriş yapacağız. Flask, "mikro"dur çünkü web uygulaması oluşturmak için gereken en temel özellikleri sağlar, ancak büyük projeler için de esneklik sunar.
Flask ile basit bir web uygulaması nasıl oluşturulur, farklı sayfalar (route'lar) nasıl tanımlanır, kullanıcılara dinamik HTML içeriği nasıl sunulur ve formlardan veri nasıl alınır gibi konuları göreceğiz.
1. Web Framework Nedir? Neden Flask?
- Web Framework (Çatı): Web uygulamaları geliştirmek için önceden yazılmış kod kütüphaneleri ve araç setleridir. Sık tekrar eden görevleri (örneğin gelen bir URL'ye göre hangi kodun çalışacağını belirleme) sizin yerinize framework yapar.
- Neden Flask?:
- Mikro Framework: Temel özellikleri içerir, karmaşık değildir.
- Esnek: İhtiyaca göre ek kütüphanelerle genişletilebilir.
- Öğrenmesi Kolay: Yeni başlayanlar için web framework mantığını kavramak için iyi bir başlangıç noktasıdır.
- Python Tabanlı: Python bilginizi doğrudan web uygulaması geliştirmede kullanmanızı sağlar.
2. Kurulum ve İlk Flask Uygulaması
Flask kullanmak için öncelikle Python'ın kurulu olduğundan emin olun (Konu 9). Ardından pip paket yöneticisi ile Flask'ı kurabilirsiniz:
Kod:
pip install Flask
Python:
# app.py dosyası
from flask import Flask # Flask sınıfını içe aktar
app = Flask(__name__) # Bir Flask uygulaması objesi oluştur
# Anasayfa ('/') için bir URL yönlendirmesi (route) tanımla
@app.route('/')
def index(): # Bu URL'ye gidildiğinde çalışacak fonksiyon
return 'Merhaba, Hazır Kod Bankası Flask Uygulaması!' # Kullanıcıya gönderilecek yanıt (basit HTML)
# İsteğe bağlı: Uygulamayı sadece bu dosya doğrudan çalıştırıldığında başlat
if __name__ == '__main__':
app.run(debug=True) # Flask uygulamasını çalıştır (debug=True hata mesajlarını görmeyi sağlar)
Uygulamayı Çalıştırma: Komut satırını açın, `app.py` dosyasının olduğu klasöre gidin ve `python app.py` komutunu çalıştırın. Terminalde "Running on
Ziyaretçiler için gizlenmiş link, görmek için kayıt olun. Giriş yap veya üye ol.
3. URL Yönlendirme (Routing)
Web uygulamanızdaki farklı sayfalar veya adresler için yeni route'lar tanımlayabilirsiniz.
Python:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Anasayfa'
@app.route('/hakkimizda') # Yeni bir route
def hakkimizda():
return 'Hakkımızda Sayfası'
# URL içinde değişken (dinamik) parça kullanma
@app.route('/kullanici/<kullanici_adi>') # <...> içindeki kısım değişkendir
def kullanici_profili(kullanici_adi): # Fonksiyon parametresi route'daki değişkenle aynı isimde olmalı
return f'Kullanıcı Profili: {kullanici_adi}' # Değişkeni kullan
# Farklı tipte değişkenler
@app.route('/yazi/<int:yazi_id>') # <int:...> ile değişken tipini belirt
def yazi_goster(yazi_id):
return f'Yazı ID: {yazi_id}' # yazi_id artık bir tam sayıdır (int)
if __name__ == '__main__':
app.run(debug=True)
4. HTML Şablonları (Templates) ve render_template
View fonksiyonlarından basit string'ler döndürmek yerine, genellikle dinamik olarak veri içeren tam HTML sayfaları döndürmek isteriz. Flask, Jinja2 adında bir şablon motoru kullanarak bu ihtiyacı karşılar. HTML dosyalarınız, uygulamanızın ana klasöründeki `templates` adında bir alt klasöre konulmalıdır.
Python:
# app.py dosyası
from flask import Flask, render_template # render_template fonksiyonunu içe aktar
app = Flask(__name__)
@app.route('/')
def index():
baslik = "Ana Sayfa"
kullanici = {"ad": "Ali", "yas": 30} # Sözlük (Dictionary) olarak veri
# 'index.html' şablonunu işle ve tarayıcıya gönder
# Şablona baslik ve kullanici değişkenlerini gönder
return render_template('index.html', sayfa_baslik=baslik, mevcut_kullanici=kullanici)
@app.route('/urunler')
def urunler():
urun_listesi = ["Laptop", "Klavye", "Fare", "Monitör"]
return render_template('urunler.html', urunler=urun_listesi)
if __name__ == '__main__':
app.run(debug=True)
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{ sayfa_baslik }}</title> {# Flask'tan gelen 'sayfa_baslik' değişkenini kullan #}
</head>
<body>
<h1>{{ sayfa_baslik }}</h1>
<p>Merhaba, {{ mevcut_kullanici.ad }}!</p> {# Sözlük elemanına erişim #}
<p>Yaşınız: {{ mevcut_kullanici.yas }}</p>
<p><a href="{{ url_for('urunler') }}">Ürünleri Gör</a></p> {# Flask route'una link verme #}
</body>
</html>
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ürün Listesi</title>
</head>
<body>
<h1>Ürünler</h1>
<ul>
{# Flask'tan gelen 'urunler' listesi üzerinde döngü #}
{% for urun in urunler %}
<li>{{ urun }}</li> {# Her ürün elemanını listele #}
{% endfor %}
</ul>
<p><a href="{{ url_for('index') }}">Anasayfa</a></p>
</body>
</html>
5. İstekleri Yönetme (Handling Requests) - GET ve POST
Web formlarından veri almak gibi işlemler için HTTP metotları (`GET`, `POST` gibi) kullanılır. Flask, gelen isteğin metotunu kontrol etmenizi ve form verilerine erişmenizi sağlar.
Python:
# app.py dosyası
from flask import Flask, render_template, request, redirect, url_for # request, redirect, url_for ekle
app = Flask(__name__)
@app.route('/')
def index():
return 'Anasayfa'
# /login adresine hem GET hem POST isteklerine izin ver
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# POST isteği ise form verilerini al
kullanici_adi = request.form['kullanici_adi'] # Formdaki 'kullanici_adi' name'li inputtan veriyi al
sifre = request.form['sifre'] # Formdaki 'sifre' name'li inputtan veriyi al
# Basit bir kontrol (Gerçek uygulamada veritabanı kullanılır!)
if kullanici_adi == 'admin' and sifre == '12345':
# Başarılı giriş sonrası anasayfaya yönlendir
return redirect(url_for('index'))
else:
# Hata mesajı ile login sayfasına geri dön
hata = "Kullanıcı adı veya şifre hatalı!"
return render_template('login.html', hata=hata)
else:
# GET isteği ise login formunu göster
return render_template('login.html')
if __name__ == '__main__':
app.run(debug=True)
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Giriş Yap</title>
</head>
<body>
<h1>Giriş Yap</h1>
{# Flask'tan hata değişkeni geldiyse göster #}
{% if hata %}
<p style="color:red;">{{ hata }}</p>
{% endif %}
{# Form action="" aynı sayfaya (login) POST isteği gönderir #}
<form action="" method="POST">
<label for="kullanici_adi">Kullanıcı Adı:</label><br>
<input type="text" id="kullanici_adi" name="kullanici_adi" required><br><br>
<label for="sifre">Şifre:</label><br>
<input type="password" id="sifre" name="sifre" required><br><br>
<input type="submit" value="Giriş Yap">
</form>
</body>
</html>
Sıra Sizde!
Flask ile ilk adımları attık!
- Bilgisayarınıza Flask'ı kurdunuz mu (`pip install Flask`)?
- İlk basit Flask uygulamanızı (`app.py`) yazıp çalıştırdınız mı? Tarayıcıdan erişebildiniz mi?
- `/hakkimizda` veya `/iletisim` gibi yeni route'lar ekleyip farklı string'ler döndürmeyi denediniz mi?
- URL içinde değişken alan (`/urun/<int:urun_id>`) route'lar tanımlayıp view fonksiyonunda bu değişkeni kullanmayı denediniz mi?
- `templates` klasörü oluşturup içine bir `.html` dosyası eklediniz mi? `render_template()` ile bu HTML dosyasını tarayıcıda görüntülediniz mi?
- HTML şablonunda `{{ degisken }}` ile Flask'tan gönderilen değişkenleri kullanmayı denediniz mi? `{% for ... %}` gibi basit bir Jinja2 yapısı kullandınız mı?
- Login formu örneğini kodlayıp çalıştırdınız mı? Formu gönderdiğinizde ne olduğunu gözlemlediniz mi? `request.form` ile verilere eriştiniz mi?
Serinin Geleceği?[/B]
Flask ile Web Framework dünyasına adım attık ve basit bir web uygulaması yapmanın temellerini gördük.
Seriyi buradan sonra nasıl devam ettirelim?
- Flask'ta daha ileri konular (Veritabanı entegrasyonu, WTForms ile daha karmaşık formlar, Blueprints ile modüler yapı, statik dosyalar)?
- Diğer popüler Python Web Framework'lerine giriş (Django Temelleri)?
- JavaScript Frameworklerine giriş (React, Vue, Angular)?
- Java Web Frameworklerine giriş (Spring Boot Temelleri)?
- PHP Web Frameworklerine giriş (Laravel Temelleri)?
- Web API (REST API) yapımı temelleri (Flask, Django Rest Framework, Node.js Express)?
- Daha ileri Veri Yapıları ve Algoritmalar?
- Başka bir programlama diline giriş (C#, C++ gibi)?
- Mobil geliştirme temelleri?
- Veya başka önerileriniz mi var?
Umarım bu konu, Python bilginizi kullanarak web uygulamaları geliştirmeye başlarken faydalı olmuştur. Görüşmek üzere!
Bu konu, "Hazır Kod Bankası" serisinin yirminci parçasıdır ve "Yazılım Bilgi ve Yeni Başlayanlar İçin" kategorisi altında paylaşılmıştır.