Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce bilgisayarınızda Python 3.12 veya daha güncel bir sürümün yüklü olması gerekmektedir. Flask, Python'un standart kütüphanesinde yer almadığı için "paket yöneticisi" olan pip aracılığıyla yüklenmelidir. Ayrıca, projelerinizi birbirinden izole etmek için sanal ortam (virtual environment) kullanmak, profesyonel yazılım geliştirme disiplininin en önemli parçasıdır.
Öncelikle terminal veya komut satırınızı açarak aşağıdaki adımları izleyin:
# Proje klasörünü oluşturun
mkdir flask_projem
cd flask_projem
# Sanal ortamı oluşturun
python -m venv venv
# Sanal ortamı aktif edin (Windows için)
venv\Scripts\activate
# Sanal ortamı aktif edin (Linux/macOS için)
source venv/bin/activate
# Flask kütüphanesini yükleyin
pip install Flask
Bu adımlarla projenizi izole ettiniz ve Flask kütüphanesini projenize dahil ettiniz. Artık bağımlılıklarınız projenin kendi klasörü içerisinde kalacak ve sistem geneline müdahale etmeyecektir.
İlk Flask Uygulamanızı Oluşturun
Flask ile çalışırken genellikle app.py adında bir giriş dosyası oluştururuz. Bu dosya, web sunucunuzun merkezi olacak ve gelen istekleri karşılayacaktır. İlk uygulamanızda, tarayıcıdan gelen isteğe basit bir "Merhaba Dünya" yanıtı döndüren bir rota tanımlayacağız.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def merhaba():
return "Merhaba! Flask dünyasına hoş geldiniz."
if __name__ == '__main__':
app.run(debug=True)
Yukarıdaki kodda @app.route('/') ifadesi, kullanıcının ana dizine (domain adresinize) geldiğinde hangi fonksiyonun çalışacağını belirler. debug=True parametresi ise geliştirme aşamasında kodunuzu her kaydettiğinizde sunucunun otomatik olarak yeniden başlamasını sağlar.
HTML Şablonları ile Dinamik Sayfalar
Gerçek web uygulamalarında HTML kodlarını Python fonksiyonlarının içine gömmek yerine, Jinja2 şablon motorunu kullanırız. Bu, tasarım ve mantık katmanlarını birbirinden ayırmanızı sağlar. Flask, proje klasörünüzdeki templates adlı klasörü otomatik olarak şablon dizini olarak tanır.
Öncelikle templates/index.html dosyasını oluşturun ve içine şu basit yapıyı ekleyin:
Flask Eğitimi
Hoş geldin, {{ kullanici_adi }}!
Ardından Python tarafında render_template fonksiyonunu kullanarak bu dosyayı çağırın:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def karsila(isim):
return render_template('index.html', kullanici_adi=isim)
Bu kodda değişkeni, URL üzerinden dinamik veri almamızı sağlar. Örneğin, tarayıcıya /Ahmet yazdığınızda sayfada "Hoş geldin, Ahmet!" yazısını göreceksiniz.
Kullanıcıdan Veri Alma ve Form Yönetimi
Web uygulamalarının temel amacı kullanıcıdan veri toplamaktır. Flask ile POST isteklerini yöneterek form verilerini işleyebiliriz. Güvenlik için her zaman request nesnesini kullanmalı ve gelen verileri doğrulamalısınız.
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/giris', methods=['GET', 'POST'])
def giris():
if request.method == 'POST':
kullanici = request.form.get('username')
return f"Merhaba {kullanici}, giriş başarılı!"
return render_template('giris_formu.html')
Bu yapı, kullanıcının giriş formunu doldurup gönderdiği veriyi yakalar. methods=['GET', 'POST'] tanımlaması, bu rotanın hem sayfa görüntüleme hem de veri gönderme işlemlerini kabul edeceğini belirtir.
Güvenlik Uyarısı: Kullanıcıdan gelen verileri asla doğrudan veritabanına veya HTML içine yerleştirmeyin. Jinja2 şablon motoru varsayılan olarak XSS (Cross-Site Scripting) saldırılarına karşı koruma sağlar, ancak SQL sorgularınızda mutlaka parametreli sorgular (prepared statements) kullanın.
Flask Uygulamalarında Veritabanı Kullanımı
Verileri kalıcı hale getirmek için genellikle SQLAlchemy gibi bir ORM (Object Relational Mapper) kullanılır. Bu, SQL sorguları yazmak yerine Python sınıfları ile veritabanı tablolarını yönetmenizi sağlar. Flask-SQLAlchemy eklentisi, bu süreci oldukça kolaylaştırır.
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| SQLite | Kurulum gerektirmez, dosya tabanlıdır. | Yüksek trafikli projelerde yavaştır. |
| PostgreSQL | Profesyonel, ölçeklenebilir, güvenli. | Sunucu kurulumu ve yapılandırma gerektirir. |
Uygulamayı Yayına Hazırlama (Deployment)
Geliştirme aşamasında kullandığınız app.run() komutu, üretim (production) ortamı için uygun değildir. Gerçek bir sunucuda uygulamanızı çalıştırmak için Gunicorn gibi bir WSGI (Web Server Gateway Interface) sunucusu kullanmalısınız.
# Gunicorn kurulumu
pip install gunicorn
# Uygulamayı başlatma
gunicorn -w 4 app:app
Burada -w 4 parametresi, uygulamanın 4 farklı işçi (worker) süreci ile çalışacağını belirtir, bu da eşzamanlı istekleri daha iyi yönetmenizi sağlar.
Sorumluluk Reddi: Bu rehberdeki kod örnekleri eğitim amaçlıdır. Canlıya alacağınız uygulamalarda gizli anahtarlarınızı (SECRET_KEY) asla kod içerisinde tutmayın, ortam değişkenlerini (environment variables) kullanın.
Sıkça Sorulan Sorular
Flask ile Django arasındaki fark nedir?
Flask bir "mikro" çerçevedir, yani ihtiyacınız olanı seçip eklersiniz. Django ise "bataryalar dahil" bir yapıdır; veritabanı, yönetim paneli ve kimlik doğrulama gibi özellikler hazır gelir.
Flask uygulamam neden hata veriyor?
Hataları görmek için debug=True modunu açın. Ayrıca terminaldeki hata çıktılarını inceleyerek hatanın hangi satırda ve hangi kütüphanede oluştuğunu kolayca tespit edebilirsiniz.
Veritabanı bağlantısı nasıl güvenli tutulur?
Veritabanı kullanıcı adı ve şifrenizi kodun içine yazmayın. .env dosyası kullanarak bu bilgileri saklayın ve projeyi GitHub gibi platformlara yüklerken bu dosyayı dışarıda tutun.
Flask ile API yazabilir miyim?
Evet, Flask sadece HTML değil, JSON döndüren API'lar yazmak için de mükemmeldir. jsonify fonksiyonunu kullanarak kolayca RESTful servisler oluşturabilirsiniz.
Projem büyüdüğünde ne yapmalıyım?
Uygulamanız büyüdüğünde "Blueprints" yapısını kullanarak kodunuzu modüllere ayırmalı ve projeyi daha yönetilebilir hale getirmelisiniz.
Flask Uygulamalarında Performans Optimizasyonu ve Ölçeklendirme
Uygulamanız kullanıcı sayısını artırdığında, Flask'ın varsayılan geliştirme sunucusu (development server) yetersiz kalacaktır. Üretim ortamında (production) yüksek trafikle başa çıkmak için WSGI sunucularını ve önbellekleme stratejilerini kullanmanız gerekir.
Gunicorn ile Üretim Ortamı Sunucusu
Flask'ın kendi sunucusu sadece geliştirme amaçlıdır. Canlıya alırken Gunicorn gibi çok iş parçacıklı (multi-threaded) bir WSGI sunucusu kullanmalısınız. Bu, aynı anda gelen birden fazla isteği yönetmenizi sağlar.
# Gunicorn ile uygulamayı 4 çalışan işlem (worker) ile başlatma
gunicorn --workers 4 --bind 0.0.0.0:8000 app:app
Önbellekleme (Caching) ile Yanıt Sürelerini Kısaltma
Veritabanı sorguları veya karmaşık hesaplamalar uygulamanızı yavaşlatabilir. Flask-Caching eklentisi ile sık erişilen verileri bellekte tutarak (Redis veya Memcached kullanarak) yanıt sürelerini milisaniyelere indirebilirsiniz.
from flask_caching import Cache
cache = Cache(app, config={'CACHE_TYPE': 'simple'})
@app.route('/dashboard')
@cache.cached(timeout=60) # Veriyi 60 saniye boyunca önbellekte tutar
def dashboard():
# Uzun süren veritabanı işlemleri burada yapılır
return render_template('dashboard.html')
Flask Uygulamalarında Birim Testleri (Unit Testing)
Büyüyen projelerde kodun kararlılığını korumak için test yazmak zorunludur. Flask, test_client arayüzü sayesinde tarayıcıyı simüle ederek rotalarınızı test etmenize olanak tanır.
Pytest ile Test Senaryosu
Aşağıdaki örnek, bir rotanın doğru çalışıp çalışmadığını kontrol eden basit bir test senaryosudur:
import pytest
from app import app
@pytest.fixture
def client():
app.config['TESTING'] = True
with app.test_client() as client:
yield client
def test_index_route(client):
response = client.get('/')
assert response.status_code == 200
assert b'Hos Geldiniz' in response.data
Test Stratejileri
- Birim Testleri: Tek tek fonksiyonların ve yardımcı sınıfların doğruluğunu kontrol edin.
- Entegrasyon Testleri: Veritabanı ve form gönderimi gibi uçtan uca iş akışlarını test edin.
- Mocking: Harici API servislerine yapılan istekleri test ederken, gerçek API'yi çağırmak yerine
unittest.mockkullanarak sahte yanıtlar döndürün.
Profesyonel İpucu: Testlerinizi yazarken pytest kütüphanesini tercih edin. Flask ile mükemmel uyum sağlar ve test kapsamınızı (coverage) raporlamanıza yardımcı olur.
Sonuç
Python ile Flask kullanarak temel bir web uygulaması geliştirmek, sadece kod yazmayı değil, HTTP protokolünü ve sunucu mantığını da anlamanızı sağlar. Bu rehberde öğrendiğiniz rotalar, şablonlar ve form yönetimi, daha karmaşık projelerin temelini oluşturur. Bir sonraki adım olarak, Flask-Login eklentisi ile kullanıcı giriş sistemlerini inceleyebilir ve SQLAlchemy ile veritabanı ilişkilerini derinleştirebilirsiniz. Unutmayın, yazılım geliştirme bir süreçtir; küçük adımlarla başlayıp projenizi zamanla büyüterek uzmanlaşabilirsiniz.


Yorumlar (0)
Yorum Yaz