Flask ile Web Uygulamaları Geliştirme Rehberi

Flask ile Web Uygulamaları Geliştirme Rehberi

Bu makalede, Python’ın popüler mikro web çerçevesi Flask’ı kullanarak web uygulamaları oluşturmayı adım adım öğreneceğiz. Flask, basitliği ve esnekliği ile bilinir, bu da onu hem yeni başlayanlar hem de deneyimli geliştiriciler için mükemmel bir seçim yapar. Bu rehberde, Flask’ın temellerini, kurulumunu, temel kavramlarını ve gerçek dünya uygulamalarını kapsayacağız.

İçindekiler

Flask Nedir?

Flask, Armin Ronacher tarafından geliştirilen ve BSD lisansı altında dağıtılan bir Python mikro web çerçevesidir. ‘Mikro’ terimi, Flask’ın temel işlevselliği sağladığı ve ek özellikler için uzantılara güvendiği anlamına gelir. Bu yaklaşım, geliştiricilere uygulamalarının gereksinimlerine en uygun bileşenleri seçme özgürlüğü sunar. Flask, Werkzeug WSGI araç seti ve Jinja2 template motoru üzerine inşa edilmiştir.

Flask Kurulumu

Flask’ı kurmak için Python ve pip’in (Python paket yöneticisi) sisteminizde yüklü olması gerekir. Ardından, aşağıdaki komutu kullanarak Flask’ı kolayca kurabilirsiniz:

pip install Flask

Bu komut, Flask ve bağımlılıklarını otomatik olarak yükleyecektir. Kurulum tamamlandıktan sonra, Flask’ı kullanmaya başlayabilirsiniz.

Temel Kavramlar

Flask ile web uygulamaları geliştirmeye başlamadan önce, bazı temel kavramları anlamak önemlidir. Bunlar şunlardır:

  • Route: Bir URL’nin hangi fonksiyon tarafından işleneceğini tanımlar.
  • View Fonksiyonu: Bir isteği işleyen ve bir yanıt döndüren fonksiyondur.
  • Template: HTML, CSS ve JavaScript gibi statik dosyaların dinamik içerikle birleştirildiği şablonlardır.
  • Request: Kullanıcının sunucuya gönderdiği istektir (örneğin, bir web sayfasını görüntülemek için yapılan istek).
  • Response: Sunucunun kullanıcıya gönderdiği yanıttır (örneğin, bir HTML sayfası).

Route Tanımlama

Flask’ta route’lar, @app.route() dekoratörü kullanılarak tanımlanır. Bu dekoratör, bir URL’yi bir view fonksiyonu ile ilişkilendirir. Örneğin:


from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Merhaba Dünya!'

if __name__ == '__main__':
    app.run(debug=True)

Bu kod, / URL’sini hello_world() fonksiyonu ile ilişkilendirir. Bu fonksiyon, ‘Merhaba Dünya!’ metnini döndürür. app.run(debug=True) satırı, uygulamayı geliştirme modunda başlatır.

Template Motoru (Jinja2)

Flask, Jinja2 template motorunu varsayılan olarak kullanır. Jinja2, dinamik içerik oluşturmak için HTML şablonlarına değişkenler ve kontrol yapıları eklemenize olanak tanır. Örneğin:


from flask import Flask, render_template
app = Flask(__name__)

@app.route('/merhaba/')
def merhaba(isim):
    return render_template('merhaba.html', isim=isim)

if __name__ == '__main__':
    app.run(debug=True)

Bu kod, /merhaba/<isim> URL’sini merhaba() fonksiyonu ile ilişkilendirir. Bu fonksiyon, merhaba.html şablonunu kullanarak dinamik bir sayfa oluşturur. merhaba.html dosyası şu şekilde olabilir:


<!DOCTYPE html>
<html>
<head>
    <title>Merhaba</title>
</head>
<body>
    <h1>Merhaba, {{ isim }}!</h1>
</body>
</html>

{{ isim }}, Jinja2 tarafından merhaba() fonksiyonundan geçirilen isim değişkeni ile değiştirilecektir.

Form İşlemleri

Flask, kullanıcıdan veri almak için formları kolayca işlemenize olanak tanır. Formları oluşturmak ve işlemek için Flask-WTF gibi uzantıları kullanabilirsiniz. İşte basit bir form örneği:


from flask import Flask, render_template, request, flash
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'gizli_anahtar'

class IsimForm(FlaskForm):
    isim = StringField('İsminiz:', validators=[DataRequired()])
    gonder = SubmitField('Gönder')

@app.route('/', methods=['GET', 'POST'])
def index():
    isim = None
    form = IsimForm()
    if form.validate_on_submit():
        isim = form.isim.data
        form.isim.data = ''
        flash('Form başarıyla gönderildi!')
    return render_template('index.html', form=form, isim=isim)

if __name__ == '__main__':
    app.run(debug=True)

Bu kod, bir isim alanına sahip bir form oluşturur ve kullanıcıdan alınan ismi index.html şablonuna gönderir. index.html dosyası şu şekilde olabilir:


<!DOCTYPE html>
<html>
<head>
    <title>Flask Formu</title>
</head>
<body>
    <h1>Flask Formu Örneği</h1>
    <form method="post">
        {{ form.hidden_tag() }}
        {{ form.isim.label }} {{ form.isim() }}
        {{ form.gonder() }}
    </form>
    {% if isim %}
        <p>Merhaba, {{ isim }}!</p>
    {% endif %}
    {% with messages = get_flashed_messages() %}
      {% if messages %}
        <ul class=flashes>
        {% for message in messages %}
          <li>{{ message }}</li>
        {% endfor %}
        </ul>
      {% endif %}
    {% endwith %}
</body>
</html>

Veritabanı Entegrasyonu

Flask, SQLAlchemy gibi ORM (Object-Relational Mapper) kütüphaneleri ile kolayca entegre edilebilir. SQLAlchemy, veritabanı işlemlerini daha kolay ve güvenli hale getirir. İşte SQLAlchemy ile basit bir veritabanı entegrasyonu örneği:


from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///veritabani.db'
db = SQLAlchemy(app)

class Kullanici(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    isim = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<Kullanici %r>' % self.isim

with app.app_context():
    db.create_all()

if __name__ == '__main__':
    app.run(debug=True)

Bu kod, bir SQLite veritabanı oluşturur ve Kullanici adında bir tablo tanımlar. db.create_all() fonksiyonu, veritabanını ve tabloları oluşturur.

Hata Yönetimi

Flask, hataları yönetmek için çeşitli mekanizmalar sunar. Örneğin, @app.errorhandler() dekoratörü ile özel hata sayfaları oluşturabilirsiniz:


from flask import Flask, render_template

app = Flask(__name__)

@app.errorhandler(404)
def sayfa_bulunamadi(e):
    return render_template('404.html'), 404

if __name__ == '__main__':
    app.run(debug=True)

Bu kod, 404 hatası (Sayfa Bulunamadı) için özel bir hata sayfası tanımlar. 404.html dosyası, hata mesajını ve diğer bilgileri içerebilir.

Büyük Uygulamalar İçin Flask

Flask, büyük ve karmaşık uygulamalar için de uygundur. Büyük uygulamaları yönetmek için modüler bir yapı kullanabilirsiniz. Bu, uygulamanızı daha küçük, yönetilebilir parçalara ayırmanıza olanak tanır. Flask’ta blueprint’ler (taslaklar), modüler uygulamalar oluşturmanıza yardımcı olur.

Örnek Uygulama

Bu bölümde, öğrendiğimiz kavramları kullanarak basit bir blog uygulaması oluşturacağız. Bu uygulama, kullanıcıların makaleler oluşturmasına, düzenlemesine ve görüntülemesine olanak tanır.

Bu uygulama için gerekli dosyalar şunlardır:

  • app.py: Uygulama mantığını içerir.
  • templates/: HTML şablonlarını içerir.
  • static/: CSS, JavaScript ve resimler gibi statik dosyaları içerir.

app.py dosyası şu şekilde olabilir:


from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
db = SQLAlchemy(app)

class Makale(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    baslik = db.Column(db.String(100), nullable=False)
    icerik = db.Column(db.Text, nullable=False)

    def __repr__(self):
        return '<Makale %r>' % self.baslik

with app.app_context():
    db.create_all()

@app.route('/')
def index():
    makaleler = Makale.query.all()
    return render_template('index.html', makaleler=makaleler)

@app.route('/makale/ekle', methods=['GET', 'POST'])
def makale_ekle():
    if request.method == 'POST':
        baslik = request.form['baslik']
        icerik = request.form['icerik']
        yeni_makale = Makale(baslik=baslik, icerik=icerik)
        db.session.add(yeni_makale)
        db.session.commit()
        return redirect(url_for('index'))
    return render_template('makale_ekle.html')

if __name__ == '__main__':
    app.run(debug=True)

templates/index.html dosyası şu şekilde olabilir:


<!DOCTYPE html>
<html>
<head>
    <title>Blog Uygulaması</title>
</head>
<body>
    <h1>Blog Makaleleri</h1>
    <a href="{{ url_for('makale_ekle') }}">Yeni Makale Ekle</a>
    <ul>
        {% for makale in makaleler %}
            <li><h2>{{ makale.baslik }}</h2><p>{{ makale.icerik }}</p></li>
        {% endfor %}
    </ul>
</body>
</html>

templates/makale_ekle.html dosyası şu şekilde olabilir:


<!DOCTYPE html>
<html>
<head>
    <title>Makale Ekle</title>
</head>
<body>
    <h1>Yeni Makale Ekle</h1>
    <form method="post">
        <label for="baslik">Başlık:</label><br>
        <input type="text" id="baslik" name="baslik"><br><br>
        <label for="icerik">İçerik:</label><br>
        <textarea id="icerik" name="icerik" rows="4" cols="50"></textarea><br><br>
        <input type="submit" value="Kaydet">
    </form>
</body>
</html>

Sonuç

Bu makalede, Flask mikro web çerçevesini kullanarak web uygulamaları oluşturmanın temellerini öğrendik. Flask’ın basitliği ve esnekliği, onu web geliştirme projeleriniz için mükemmel bir seçim yapar. Bu rehberde öğrendiğiniz bilgilerle, kendi Flask uygulamalarınızı geliştirmeye başlayabilirsiniz. Unutmayın, sürekli pratik yapmak ve farklı projelerde Flask’ı kullanmak, becerilerinizi geliştirmenin en iyi yoludur.

Leave A Comment

Your email address will not be published. Required fields are marked *