Flask Rehberi: Python ile Modern Backend ve API Geliştirme
Yazar: Burak Balkı | Kategori: Backend Development | Okuma Süresi: 9 dk
Bu kapsamlı Flask rehberi, Python ile modern backend geliştirmeye dair kurulum, routing, veritabanı yönetimi ve best practices konularını adım adım ve profes...
## Flask Nedir ve Neden Tercih Edilmelidir?
**Flask**, Python programlama dili ile yazılmış, hafif (micro) bir web framework'üdür. 'Mikro' terimi, Flask'ın çekirdek özelliklerinin basit ama genişletilebilir olduğu anlamına gelir. Django gibi 'pilleri dahil' (batteries-included) bir yaklaşım yerine, Flask geliştiricilere ihtiyaç duydukları bileşenleri seçme özgürlüğü tanır.
Flask'ın tercih edilme nedenleri:
- **Esneklik:** Proje yapısını tamamen geliştirici belirler.
- **Hafiflik:** Gereksiz kütüphane yükü getirmez.
- **Ölçeklenebilirlik:** Küçük projelerden karmaşık mikroservis mimarilerine kadar genişleyebilir.
- **Geniş Ekosistem:** Flask-SQLAlchemy, Flask-Migrate ve Flask-JWT-Extended gibi güçlü eklentilere sahiptir.
## Flask Kurulumu ve Geliştirme Ortamının Hazırlanması
Profesyonel bir Flask projesine başlarken **Virtual Environment (Sanal Ortam)** kullanmak, bağımlılık çakışmalarını önlemek için kritiktir.
### 1. Sanal Ortam Oluşturma
```bash
# Proje dizinine gidin
mkdir flask-projesi && cd flask-projesi
# Sanal ortam oluşturun
python -m venv venv
# Sanal ortamı aktif edin (Windows)
.\\venv\\Scripts\\activate
# Sanal ortamı aktif edin (macOS/Linux)
source venv/bin/activate
```
### 2. Flask Paketinin Yüklenmesi
```bash
pip install Flask
```
## İlk Flask Uygulaması: Hello World
En temel seviyede bir Flask uygulaması, bir uygulama nesnesi oluşturmayı ve rotaları (routes) tanımlamayı içerir.
```python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Flask Dünyasına Hoş Geldiniz!"
if __name__ == '__main__':
app.run(debug=True)
```
> **Önemli Not:** `debug=True` parametresi, geliştirme aşamasında kodda yapılan değişikliklerin otomatik olarak algılanmasını ve tarayıcıda detaylı hata raporları sunulmasını sağlar. Prodüksiyon ortamında asla aktif edilmemelidir.
## Routing ve Dinamik URL Yapılandırması
Flask, modern ve SEO uyumlu URL yapıları oluşturmak için dekoratörleri kullanır. Dinamik parametreler sayesinde kullanıcı bazlı sayfalar oluşturulabilir.
```python
@app.route('/user/')
def show_user_profile(username):
return f'Kullanıcı: {username}'
@app.route('/post/')
def show_post(post_id):
return f'Makale ID: {post_id}'
```
| Tip Değiştirici | Açıklama |
| :--- | :--- |
| `string` | Varsayılan tip (slash içermez) |
| `int` | Pozitif tam sayılar |
| `float` | Ondalıklı sayılar |
| `path` | Slash karakterlerini de kabul eden string |
| `uuid` | UUID formatındaki veriler |
## Request ve Response Yönetimi
Backend geliştirmede istemciden gelen verileri işlemek ve uygun yanıtları dönmek temel süreçtir. Flask'ın `request` nesnesi bu süreci yönetir.
```python
from flask import request, jsonify
@app.route('/api/data', methods=['POST'])
def handle_data():
# JSON verisini al
data = request.get_json()
if not data:
return jsonify({"error": "Veri bulunamadı"}), 400
return jsonify({"message": "Başarılı", "received": data}), 201
```
## Jinja2 Template Motoru ile Dinamik İçerik
Flask, HTML dosyalarını dinamik verilerle birleştirmek için **Jinja2** motorunu kullanır. Bu, backend verilerinin frontend arayüzüne güvenli bir şekilde aktarılmasını sağlar.
```python
from flask import render_template
@app.route('/dashboard')
def dashboard():
user_data = {"name": "Ahmet", "role": "Admin"}
items = ["Raporlar", "Ayarlar", "Kullanıcılar"]
return render_template('dashboard.html', user=user_data, items=items)
```
`dashboard.html` örneği:
```html
Hoş geldin, {{ user.name }}
-
{% for item in items %}
- {{ item }} {% endfor %}