Yükleniyor...

Flask Rehberi: Python ile Modern Web Uygulaması Geliştirme

Yazar: Burak Balkı | Kategori: Backend Development | Okuma Süresi: 9 dk

Flask framework'ün temellerinden ileri seviye mimari yapılarına kadar her detayı içeren kapsamlı teknik rehber. Python ile backend geliştirmede best practice...

## Flask Nedir? Mikro Framework Kavramını Anlamak **Flask**, Python tabanlı, hafif ve esnek bir web çatısıdır (framework). Armin Ronacher tarafından geliştirilen Flask, "mikro framework" olarak tanımlanır. Buradaki "mikro" terimi, framework'ün yeteneklerinin az olduğu anlamına değil, çekirdeğin basit ama genişletilebilir olduğu anlamına gelir. Flask, veritabanı soyutlama katmanı, form doğrulama veya diğer bileşenleri varsayılan olarak sunmaz. Bunun yerine, projenin ihtiyacına göre eklentiler (extensions) aracılığıyla bu özelliklerin eklenmesine olanak tanır. Bu felsefe, geliştiriciye tam kontrol ve esneklik sağlar. ### Flask Mimarisinin Temel Taşları Flask iki ana kütüphane üzerine inşa edilmiştir: 1. **Werkzeug:** Bir WSGI (Web Server Gateway Interface) kütüphanesidir. HTTP isteklerini ve yanıtlarını yönetir. 2. **Jinja2:** Python için hızlı ve güvenli bir şablon motorudur. | Özellik | Flask | Django | | :--- | :--- | :--- | | Mimari | Mikro Framework | Monolitik (Full-stack) | | Esneklik | Çok Yüksek | Sınırlı (Kendi kuralları var) | | Öğrenme Eğrisi | Düşük | Orta/Yüksek | | Veritabanı | Eklenti Gerektirir (SQLAlchemy vb.) | Dahili ORM | | Kullanım Alanı | Mikroservisler, API'lar, Hızlı Prototipler | Büyük Ölçekli Kurumsal Uygulamalar | ## Flask Kurulumu ve Geliştirme Ortamının Hazırlanması Modern Python geliştirmede, projelerin bağımlılıklarını izole etmek için **Sanal Ortam (Virtual Environment)** kullanmak standart bir uygulamadır. ### Adım 1: Sanal Ortam Oluşturma ```bash # Proje klasörünü oluşturun mkdir flask_projesi && cd flask_projesi # Sanal ortamı oluşturun python3 -m venv venv # Sanal ortamı aktif edin (Windows için: venv\\Scripts\\activate) source venv/bin/activate ``` ### Adım 2: Flask Yükleme ```bash pip install Flask ``` ## İlk Flask Uygulaması: Hello World Flask ile minimal bir uygulama yazmak oldukça basittir. Aşağıdaki kod, `/` rotasına gelen isteklere yanıt veren temel bir sunucu oluşturur. ```python from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Merhaba, Flask Dünyası!' if __name__ == '__main__': app.run(debug=True) ``` > **Önemli Not:** `debug=True` parametresi, geliştirme aşamasında kod değişikliklerinin otomatik olarak algılanmasını ve hataların tarayıcıda detaylı gösterilmesini sağlar. Canlı (Production) ortamda asla aktif edilmemelidir. ## Yönlendirme (Routing) ve Dinamik URL Yapıları Flask'ta URL'leri Python fonksiyonlarına bağlamak için `@app.route` dekoratörü kullanılır. Modern web uygulamalarında dinamik URL parametreleri kritik öneme sahiptir. ```python @app.route('/user/') def show_user_profile(username): return f'Kullanıcı: {username}' @app.route('/post/') def show_post(post_id): return f'Yazı ID: {post_id}' ``` Flask şu değişken tiplerini destekler: - `string`: Varsayılan tip (slash içermez) - `int`: Tam sayılar - `float`: Ondalıklı sayılar - `path`: Slash içeren metinler - `uuid`: UUID formatındaki veriler ## HTTP Metodları ile Çalışmak RESTful API geliştirirken farklı HTTP metodlarını (GET, POST, PUT, DELETE) yönetmek gerekir. Flask'ta bu işlem `methods` parametresi ile yapılır. ```python from flask import request @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': return "Giriş yapılıyor..." else: return "Giriş sayfası" ``` ## Şablon Motoru: Jinja2 Kullanımı HTML içeriğini Python kodundan ayırmak için **Jinja2** kullanılır. Bu sayede dinamik içerikler güvenli bir şekilde render edilir. ```python from flask import render_template @app.route('/hello/') def hello(name=None): return render_template('hello.html', name=name) ``` `templates/hello.html` dosyasının içeriği: ```html Selamlama {% if name %}

Merhaba {{ name }}!

{% else %}

Merhaba Yabancı!

{% endif %} ``` ## Veritabanı Entegrasyonu: Flask-SQLAlchemy Flask'ta veritabanı işlemleri için en popüler araç **Flask-SQLAlchemy** eklentisidir. Bu araç, SQL sorguları yerine Python sınıfları (Modeller) kullanmanıza olanak tanır. ```python from flask_sqlalchemy import SQLAlchemy app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self): return f'' ``` ## Form Yönetimi ve Doğrulama: Flask-WTF Kullanıcıdan gelen verilerin güvenliği için **Flask-WTF** kullanılır. Bu eklenti CSRF koruması sağlar ve form doğrulamayı kolaylaştırır. ```python from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired class NameForm(FlaskForm): name = StringField('İsminiz nedir?', validators=[DataRequired()]) submit = SubmitField('Gönder') ``` ## Uygulama Mimarisi: Blueprints Büyük projelerde tüm rotaları tek bir dosyada tutmak sürdürülebilir değildir. **Blueprints**, uygulamayı modüler parçalara bölmenizi sağlar. ```python # auth.py from flask import Blueprint auth_bp = Blueprint('auth', __name__) @auth_bp.route('/login') def login(): return "Giriş Sayfası" # app.py from auth import auth_bp app.register_blueprint(auth_bp, url_prefix='/auth') ``` ## Hata Yönetimi ve Loglama Profesyonel uygulamalarda hatalar şık bir şekilde ele alınmalı ve kaydedilmelidir. ```python @app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 import logging logging.basicConfig(filename='error.log', level=logging.ERROR) ``` ## Performans İpuçları ve En İyi Uygulamalar (Best Practices) 1. **Gunicorn Kullanın:** Flask'ın dahili sunucusu sadece geliştirme içindir. Production ortamında Gunicorn gibi bir WSGI sunucusu kullanın. 2. **Environment Variables:** Hassas verileri (API anahtarları, DB şifreleri) `.env` dosyalarında saklayın. 3. **Caching:** Sık erişilen veriler için `Flask-Caching` (Redis/Memcached) kullanın. 4. **Async Desteği:** Flask 2.0+ ile gelen `async/await` desteğini kullanarak I/O yoğunluklu işlemleri optimize edin. 5. **Veritabanı İndeksleme:** Sık sorgulanan sütunlara indeks ekleyerek performansı artırın. ## Sık Yapılan Hatalar - **DEBUG Modu:** Canlı ortamda `debug=True` bırakmak güvenlik açığı yaratır. - **Dairesel Importlar:** Modüler yapıda dosyaların birbirini içe aktarması (circular import) hatalarına dikkat edilmelidir. - **Global Değişkenler:** İstekler (requests) arasında veri paylaşmak için global değişken kullanmak, thread-safety sorunlarına yol açar. ## Sık Sorulan Sorular (SSS) **1. Flask ölçeklenebilir mi?** Evet, Blueprint yapısı ve mikroservis mimarisine uygunluğu sayesinde çok büyük ölçekli uygulamalar geliştirilebilir. Pinterest ve LinkedIn gibi devler bazı servislerinde Flask kullanmaktadır. **2. Flask öğrenmek için Python bilmek şart mı?** Kesinlikle. Flask bir Python kütüphanesidir, bu nedenle temel Python yapılarına hakim olmanız gerekir. **3. Flask ile API geliştirmek mantıklı mı?** Evet, özellikle `Flask-RESTful` veya `Flask-Marshmallow` gibi eklentilerle hızlı ve performanslı REST API'lar geliştirilebilir. **4. Django mu Flask mı tercih edilmeli?** Eğer projeniz standart bir yapıdaysa (admin paneli, kullanıcı yönetimi vb. hemen hazır olsun istiyorsanız) Django; eğer özgürlük ve hafiflik istiyorsanız Flask tercih edilmelidir. **5. Flask asenkron işlemleri destekliyor mu?** Evet, Flask 2.0 sürümüyle birlikte asenkron view fonksiyonları resmi olarak desteklenmektedir. ## Özet Flask, sadeliği ve esnekliği bir araya getiren güçlü bir framework'tür. Bu rehberde, kurulumdan başlayarak veritabanı yönetimi, formlar ve modüler mimari gibi kritik konulara değindik. Flask ile geliştirme yaparken en önemli kural, ihtiyacınız olan bileşenleri doğru eklentilerle sisteme dahil etmektir.