Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner
Yan Yana Banner
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
Kurulum tamamlandıktan sonra, ilk Flask uygulamanızı yazabilirsiniz. Bu kodu bir Python dosyasına kaydedin (örneğin `app.py`).

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)
Açıklama: `from flask import Flask` ile Flask'ı içe aktardık. `app = Flask(__name__)` ile bir Flask uygulaması örneği oluşturduk. `@app.route('/')` dekoratörü, altındaki `index()` fonksiyonunun ana URL'ye (`/`) yapılan isteklerde çalışacağını belirtir. `index()` fonksiyonu, tarayıcıya gönderilecek yanıtı (`return`) döndürür. `if __name__ == '__main__': app.run()` kodu, sadece `python app.py` şeklinde bu dosya çalıştırıldığında uygulamanın başlatılmasını 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.
" gibi bir mesaj göreceksiniz. Tarayıcınızı açıp bu adrese (genellikle `localhost:5000`) gittiğinizde "Merhaba, Hazır Kod Bankası Flask Uygulaması!" yazısını göreceksiniz.

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)
Açıklama: `/hakkimizda` gibi sabit path'lerin yanı sıra, `/kullanici/<kullanici_adi>` gibi `<...>` içine alarak URL'nin bir kısmını değişken yapabiliriz. Bu değişken, view fonksiyonuna parametre olarak gelir. `<int:yazi_id>` gibi tip belirterek gelen değişkenin türünü de Flask'ın işlemesini sağlayabiliriz.

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)
Şimdi projenizin ana klasöründe `templates` adında bir klasör oluşturun ve içine `index.html` ile `urunler.html` dosyalarını ekleyin:

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>
Açıklama: `render_template()` fonksiyonu, belirttiğiniz HTML dosyasını işler ve yanına gönderdiğiniz değişkenleri o dosyada kullanılabilir hale getirir. HTML içinde `{{ degisken_adi }}` ile değişkenin değerini gösterebilir, `{% kontrol_yapilari %}` ile if, for gibi kontrol yapılarını kullanabilirsiniz. `url_for('route_fonksiyon_adi')` ise Flask'ın route'ları için doğru URL'yi otomatik üretir, böylece URL'leri kod içinde sabit olarak yazmaktan kaçınırsınız.

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)
Şimdi projenizin `templates` klasörüne `login.html` dosyasını ekleyin:

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>
Açıklama: `@app.route('/login', methods=['GET', 'POST'])` ile bu route'un hem GET (sayfayı ilk açma) hem de POST (formu gönderme) isteklerini kabul edeceğini belirttik. `request.method` ile gelen isteğin türünü kontrol ederiz. `request.form['input_name']` ile POST isteğiyle gelen form verilerine (input elementinin `name` özelliğiyle) erişiriz. `redirect(url_for('route_fonksiyon_adi'))` ile kullanıcıyı başka bir sayfaya yönlendiririz.

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?
Flask kurulumu, routing (yönlendirme), template kullanımı, `request` objesi veya form işlemleri hakkında aklınıza takılan soruları çekinmeden bu konu altında sorabilirsiniz.

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?
Geri bildirimleriniz ve önerileriniz serinin geleceğini şekillendirecektir.

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.
 

Şu an konuyu görüntüleyenler

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz

Zevkini yansıtan rengi seç

Geniş / Dar görünüm

Temanızı geniş yada dar olarak kullanmak için kullanabileceğiniz bir yapıyı kontrolünü sağlayabilirsiniz.

Izgara görünümlü forum listesi

Forum listesindeki düzeni ızgara yada sıradan listeleme tarzındaki yapının kontrolünü sağlayabilirsiniz.

Resimli ızgara modu

Izgara forum listesinde resimleri açıp/kapatabileceğiniz yapının kontrolünü sağlayabilirsiniz.

Kenar çubuğunu kapat

Kenar çubuğunu kapatarak forumdaki kalabalık görünümde kurtulabilirsiniz.

Sabit kenar çubuğu

Kenar çubuğunu sabitleyerek daha kullanışlı ve erişiminizi kolaylaştırabilirsiniz.

Köşe kıvrımlarını kapat

Blokların köşelerinde bulunan kıvrımları kapatıp/açarak zevkinize göre kullanabilirsiniz.

Geri