Python ile Web Sitesi Yapma Rehberi 2026 — TechWave
Python

Python ile Web Sitesi Yapma Rehberi 2026

Python ile Web Sitesi Yapma Rehberi 2026

Neden Python ile Web Geliştirme?

Python, okunabilir sözdizimi ve zengin kütüphane ekosistemi sayesinde web geliştirme dünyasında uzun süredir en popüler dillerden biri. Bir web sitesi veya web uygulaması geliştirirken Python kullanmanın en büyük avantajı, aynı dili veri bilimi, otomasyon, yapay zeka ve web tarafında kullanabilmenizdir. Tek bir dilde uzmanlaşarak backend'den veri analizine kadar geniş bir yelpazede üretim yapabilirsiniz. Dille aranız yoksa önce Python Nedir? rehberimiz okumanızı öneririz.

2026 itibarıyla Python'ın web ekosistemi olgunlaştı: Flask, Django ve FastAPI gibi çerçeveler (framework) farklı ölçekler için net çözümler sunuyor. Ayrıca paket yöneticisi pip, sanal ortam (virtual environment) ve dağıtım araçları (Docker, Gunicorn) sayesinde proje kurulumundan canlıya alma süreci standartlaştı. Bu rehberde Flask'ı adım adım kullanarak basit bir web sitesi kuracağız; ardından Django ile karşılaştırma, veritabanı entegrasyonu, form yönetimi, dağıtım seçenekleri ve SEO ipuçlarını ele alacağız. Alternatif arayanlar için WordPress mi HTML mi rehberimiz karşılaştırması da faydalı olacaktır.

Python'un web tarafındaki tek dezavantajı, saf CPU-bound işlemlerde bazı dillere göre daha yavaş olmasıdır. Ancak modern hosting çözümleri, önbellekleme (Redis, Varnish) ve asenkron destek (ASGI) sayesinde bu fark çoğu proje için hissedilmez düzeydedir. Küçük ve orta ölçekli siteler, bloglar, SaaS prototipleri ve API'ler için Python mükemmel bir seçimdir. Dilin neden bu kadar popüler olduğunu ABD üniversitelerinde Python konulu yazımızda da ele aldık.

Flask mı, Django mu?

Flask, mikro framework olarak adlandırılır; size yalnızca bir web sunucusu, yönlendirme (routing), şablon motoru ve geliştirme sunucusu verir. Geri kalan her şeyi (veritabanı ORM, form kütüphanesi, admin paneli) isteğe bağlı paketlerle eklersiniz. Küçük projeler, API'ler, prototipler ve öğrenme amaçlı çalışmalar için idealdir; minimal soyutlamalar sayesinde HTTP'in temelini öğrenmenizi sağlar.

Django, "batteries-included" felsefesiyle gelir: ORM, admin arayüzü, form sistemi, kimlik doğrulama, önbellekleme ve güvenlik katmanları hazır olarak sunulur. Büyük içerik siteleri, e-ticaret, çok kullanıcılı paneller ve kurumsal uygulamalar için hızlı bir başlangıç sağlar. Django'nun konvansiyonları (app yapısı, settings dosyası) büyük ekiplerde tutarlılığı korur.

Karar verirken üç soruyu kendinize sorun: (1) Proje ne kadar büyük ve özellikli olacak? (2) Kaç kişi üzerinde çalışacak? (3) Ne kadar hızla canlıya almak istiyorsunuz? Küçük ve orta ölçekli, öğrenme amaçlı veya hızlı prototip gereken projelerde Flask; admin paneli, kullanıcı yönetimi ve modüler yapı gerekteren büyük uygulamalarda Django tercih edilir. Bu rehberdeki örnek, Flask ile sıfırdan bir site kurmayı gösterir.

Python Ortamını Hazırlama

Öncelikle bilgisayarınıza Python 3.11+ sürümünü kurun (python.org üzerinden). Windows'ta kurulum sırasında "Add to PATH" seçeneğini işaretlemeyi unutmayın. Kurulumu terminale python --version yazarak doğrulayın. Ardından projeniz için özel bir sanal ortam oluşturun; bu, projenizin bağımlılıklarını sistem genelinden izole eder ve sürüm çakışmalarını önler.

mkdir web-sitesi
cd web-sitesi
python -m venv venv
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate
pip install flask

Sanal ortam etkinleştikten sonra terminal satırınızın başında (venv) ibaresini görürsünüz. Bağımlılıklarınızı requirements.txt dosyasına kaydetmeyi alışkanlık haline getirin (pip freeze > requirements.txt); böylece projeyi başka bir makinede kolayca yeniden kurabilirsiniz. VS Code veya PyCharm kullanıyorsanız, editörün sanal ortamı otomatik algılamasına izin verin; otomatik tamamlama ve hata uyarıları doğru çalışsın. Geliştirme sırasında kod düzeninizi modüler tutmak için proje yapınızı en başından app.py, templates/ ve static/ klasörleriyle ayırın.

Adım Adım Basit Bir Flask Uygulaması

Proje kök dizininde app.py adında bir dosya oluşturun ve şu temel iskeleti yazın. Flask, bir Python fonksiyonunu HTTP rotasına eşleyerek çalışır; @app.route dekoratörü, hangi URL'in hangi fonksiyonu çağırdığını tanımlar.

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def anasayfa():
    return render_template("index.html", baslik="TechWave'e Hoş Geldiniz")

@app.route("/hakkimizda")
def hakkimizda():
    return render_template("hakkimizda.html")

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

Terminalde python app.py çalıştırın; sunucu http://127.0.0.1:5000 adresinde ayağa kalkar. debug=True modu, kod değiştiğinde sunucuyu otomatik yeniden yükler ve hataları tarayıcıda gösterir — geliştirme sırasında büyük kolaylık sağlar, ancak üretimde mutlaka False olmalıdır. Dinamik rotalar da ekleyebilirsiniz: @app.route("/yazi/<int:yazi_id>") gibi ifadelerle URL parametrelerini fonksiyon argümanı olarak alabilirsiniz. İleride API uç noktaları eklemek isterseniz, Flask'ın JSON döndüren rotalarla da mükemmel çalıştığını unutmayın.

Şablonlar (Templates) ile Sayfa Oluşturma

Flask, varsayılan olarak Jinja2 şablon motorunu kullanır. HTML dosyalarınızı templates/ klasörüne koyun ve render_template ile çağırın. Şablonlar, statik HTML'in ötesine geçerek döngüler, koşullar ve değişken yerleştirmeleriyle dinamik sayfa üretmenizi sağlar.

<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="tr">
<head>
  <meta charset="UTF-8">
  <title>{{ baslik }}</title>
  <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
  <h1>{{ baslik }}</h1>
  <ul>
  {% for yazi in yazilar %}
    <li><a href="/yazi/{{ yazi.id }}">{{ yazi.baslik }}</a></li>
  {% endfor %}
  </ul>
</body>
</html>

Statik dosyalar (CSS, JS, görseller) static/ klasöründe bulunur ve url_for('static', filename='...') ile çağrılır. Tekrarlanan arayüz parçalarını (header, footer) {% extends "base.html" %} ve {% block %} ile şablon miras alımıyla yönetebilirsiniz; böylece her sayfada aynı HTML'i kopyalamak zorunda kalmazsınız. Jinja2'de HTML çıktısı otomatik kaçırılır (autoescape), bu da temel XSS saldırılarına karşı doğal bir koruma sağlar.

Formlar ve Kullanıcı Etkileşimi

İletişim formu, bülten kayıt gibi etkileşimler için Flask-WTF eklentisini kullanabilirsiniz. Flask-WTF, form doğrulama, CSRF koruması ve güvenli veri gönderimi sağlar. Formunuzu Python sınıfı olarak tanımlar, şablonda render eder, POST isteğini işlersiniz.

from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, SubmitField
from wtforms.validators import DataRequired, Email

class IletisimForm(FlaskForm):
    ad = StringField("Adınız", validators=[DataRequired()])
    eposta = StringField("E-posta", validators=[DataRequired(), Email()])
    mesaj = TextAreaField("Mesajınız", validators=[DataRequired()])
    gonder = SubmitField("Gönder")

Rotada formu doğrulayıp veriyi işleyin; hata varsa formu hata mesajlarıyla tekrar gösterin. Flask, CSRFProtect ile tüm formlara otomatik CSRF token'ı ekler; bu, sitenize sahte POST istekleri gönderilmesini engeller. Güvenlik açısından ayrıca girdi temizleme (input sanitization) ve parametreli sorgular kullanmaya özen gösterin. Form gönderimlerinde POST-Redirect-GET deseni uygulayarak sayfa yenilendiğinde aynı verinin tekrar gönderilmesini (double submit) önleyebilirsiniz.

SQLite ile Veritabanı Entegrasyonu

Küçük projeler için SQLite mükemmel bir başlangıçtır: kurulum gerektirmez, tek dosya olarak çalışır ve Flask'ın sqlite3 modülüyle doğrudan entegre olur. Flask-SQLAlchemy eklentisini kullanarak ORM avantajıyla da çalışabilirsiniz. Basit bir bağlantıyı şöyle kurarsınız:

import sqlite3

def db_get():
    conn = sqlite3.connect("site.db")
    conn.row_factory = sqlite3.Row
    return conn

@app.route("/yazi/<int:id>")
def yazi(id):
    conn = db_get()
    yazi = conn.execute("SELECT * FROM yazilar WHERE id = ?", (id,)).fetchone()
    conn.close()
    return render_template("yazi.html", yazi=yazi)

Parametreli sorgu kullanmak (? yer tutucusu), SQL enjeksiyon saldırılarına karşı temel korumadır; asla kullanıcı girdisini doğrudan sorgu dizesine eklemeyin. Tablolarınızı oluşturmak için başlangıçta bir schema.sql dosyası çalıştırabilir veya Flask-Migrate gibi araçlarla şema güncellemelerini yönetebilirsiniz. Veri büyüdüğünde PostgreSQL'e geçiş yapmak kolaydır; SQLAlchemy'nin bağlantı dizesini (connection string) değiştirmeniz çoğu zaman yeterlidir. Yedekleme için düzenli olarak site.db dosyasını kopyalayın; SQLite dosyası taşınabilir olduğundan yedek almak son derece basittir.

Deployment: Sitenizi Canlıya Alma

Flask uygulamanızı geliştirmede kullanılan yerleşik sunucuyla (dev server) canlıya almayın; üretim için Gunicorn veya uWSGI gibi WSGI sunucuları kullanın. Kodunuzu GitHub'a push ettiğinizde birçok platform otomatik deploy eder. Yaygın seçenekler:

Heroku: requirements.txt ve Procfile (içinde web: gunicorn app:app) ekleyip git push heroku main demeniz yeterlidir. Ücretsiz planı sınırlı olsa da kurulumu en kolay platformlardan biridir. Railway: modern arayüzü, otomatik algılama ve ücretsiz deneme kredileriyle hızlı bir başlangıç sunar; ortam değişkenlerini panelden yönetirsiniz. PythonAnywhere: Python'a özel olarak tasarlanmış, tabanlı (always-on) uygulamalar ve basit WSGI yapılandırmasıyla yeni başlayanlar için mükemmeldir.

Deployment öncesi debug=False yaptığınızdan, SECRET_KEY'i ortam değişkeni olarak sakladığınızdan ve hata sayfalarını özelleştirdiğinizden emin olun. Ayrıca .env dosyasını .gitignore içine ekleyerek gizli anahtarlarınızın repoya girmesini önleyin. Docker ile deploy ediyorsanız, çok aşamalı (multi-stage) Docker build kullanarak görüntü boyutunu küçültebilirsiniz. CDN (Cloudflare vb.) eklemek, statik dosya yüklenme hızını dünya genelinde artırır ve ilk ziyaretçi deneyimini iyileştirir.

Python Siteleri için SEO İpuçları

Python ile site kurmak SEO'dan feragat anlamına gelmez; aksine şablonlar üzerinde tam kontrol sağlar. Her sayfa için benzersiz <title> ve meta description üretin; Jinja2 şablonlarında bu alanları dinamik olarak doldurabilirsiniz. Semantic HTML5 etiketleri (<article>, <main>, <nav>) kullanın ve H1 başlığını sayfada bir tane ile sınırlayın.

Temiz URL'ler (örneğin /yazi/flask-rehberi) hem kullanıcılar hem de arama motorları için daha iyidir; Flask rotalarıyla bunu kolayca başarabilirsiniz. sitemap.xml ve robots.txt dosyalarını dinamik üretin; yeni yazılar eklendikçe otomatik güncellensin. Schema.org yapılandırılmış verisi (Article, BreadcrumbList, Organization) ekleyerek arama sonuçlarında zengin snippet (zengin sonuç) elde etme şansınızı artırın.

Performans, SEO'nun temel direklerinden biridir: sayfa yüklenme süresini kısaltmak için statik dosyaları CDN üzerinden sunun, görselleri sıkıştırın ve gerekirse Flask-Caching ile veritabanı sorgularını önbelleğe alın. Mobil uyumlu (responsive) tasarım için viewport meta etiketini unutmayın. Son olarak, Google Search Console'a sitenizi ekleyin; indeksleme sorunlarını ve arama performansını düzenli olarak takip edin. Sunucu tarafı render (SSR) yapan Flask siteleri, doğru yapılandırıldığında arama motorları tarafından sorunsuz indekslenir.

Temel Güvenlik ve En İyi Uygulamalar

Web uygulamalarında güvenlik, ilk günden itibaren gözetilmesi gereken bir konudur. Flask kullanırken SECRET_KEY değerini asla koda gömmeyin; ortam değişkenleri veya .env dosyası üzerinden yönetin ve bu dosyayı sürüm kontrolüne (Git) eklemeyin. Cookie'ler için HttpOnly ve Secure bayraklarını etkinleştirin; böylece JavaScript'in erişemeyeceği, yalnızca HTTPS üzerinden iletilen oturum bilgileri elde edilir.

Girdi doğrulama ve çıktı kaçırma (escaping) işlemlerini her katmanda uygulayın. Jinja2 otomatik kaçırma sağlasa da, HTML dışında JSON veya e-posta çıktısı üretirken ek tedbirler gerekir. Kullanıcı şifrelerini düz metin olarak saklamayın; werkzeug.security içindeki generate_password_hash ve check_password_hash fonksiyonlarını kullanın. Yükseltmeleri düzenli takip edin: pip list --outdated ile bağımlılıklarınızı gözden geçirin ve bilinen zafiyetleri olan paketleri güncelleyin. HTTPS zorunlu kılın, gereksiz hata ayıklama bilgilerini üretim ortamında kapatın ve düzenli yedekleme yapın; bu basit alışkanlıklar, küçük bir Flask sitesini bile güvenli ve sürdürülebilir kılar.

Sonuç

Python ile web sitesi yapmak, doğru çerçeve ve temel mimari bilgisiyle son derece hızlı ve keyiflidir. Flask minimal yapısıyla HTTP'in temelini öğrenmenizi sağlarken, Django hazır bileşenleriyle büyük uygulamalarda zaman kazandırır. Sanal ortam kurulumundan şablonlara, formlardan SQLite entegrasyonuna ve canlıya almaya kadar tüm süreç, standart araçlarla şeffaftır.

Bu rehberdeki adımları uygulayarak ilk sitenizi bugün yayına alabilir, ardından deploy platformlarından birini seçip gerçek kullanıcılarla buluşturabilirsiniz. SEO ipuçlarını erken aşamada uygulamak, içeriğinizin arama sonuçlarında öne çıkmasını sağlar. Python'un web ekosistemi her ölçekten proje için yeterli olgunluktadır; bir sonraki yazımızda Django ile çok kullanıcılı bir uygulama kurmayı ele alacağız. TechWave olarak öğrenme yolculuğunuzda yanınızda olmaya devam ediyoruz!

Bu makale TechWave tarafından hazırlanmıştır.

ÇÇ
Çağlar ÇELİK

TechWave'in kurucusu ve editörü. Yapay zeka araçları, yazılım ve siber güvenlik konularını yakından takip ediyor; rehberleri kendi deneyim ve araştırmalarıyla hazırlıyor. Hakkında daha fazla bilgi