Django Model + CRUD Mini Proje

 Proje Adı: 🎓 Öğrenci Kayıt Sistemi

Bu projede:

  • ✅ Model oluşturacağız

  • ✅ Listeleme (List)

  • ✅ Ekleme (Create)

  • ✅ Güncelleme (Update)

  • ✅ Silme (Delete)

  • ✅ Bootstrap tasarım


🏗 1️⃣ Proje Oluşturma

django-admin startproject okulproje
cd okulproje
python manage.py startapp ogrenci

⚙ 2️⃣ settings.py Ayarı

INSTALLED_APPS = [
    ...
    'ogrenci',
]

🧠 3️⃣ Model Oluşturma

📁 ogrenci/models.py

from django.db import models

class Ogrenci(models.Model):
    ad = models.CharField(max_length=50)
    soyad = models.CharField(max_length=50)
    yas = models.IntegerField()
    numara = models.CharField(max_length=20, unique=True)
    kayit_tarihi = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.ad} {self.soyad}"

🔄 4️⃣ Migration

python manage.py makemigrations
python manage.py migrate

🧾 5️⃣ Form Oluşturma

📁 ogrenci/forms.py

from django import forms
from .models import Ogrenci

class OgrenciForm(forms.ModelForm):
    class Meta:
        model = Ogrenci
        fields = '__all__'

👁 6️⃣ Views (CRUD İşlemleri)

📁 ogrenci/views.py

from django.shortcuts import render, redirect, get_object_or_404
from .models import Ogrenci
from .forms import OgrenciForm

# Listeleme
def ogrenci_list(request):
    ogrenciler = Ogrenci.objects.all()
    return render(request, 'ogrenci/list.html', {'ogrenciler': ogrenciler})

# Ekleme
def ogrenci_create(request):
    form = OgrenciForm(request.POST or None)
    if form.is_valid():
        form.save()
        return redirect('ogrenci_list')
    return render(request, 'ogrenci/form.html', {'form': form})

# Güncelleme
def ogrenci_update(request, pk):
    ogrenci = get_object_or_404(Ogrenci, pk=pk)
    form = OgrenciForm(request.POST or None, instance=ogrenci)
    if form.is_valid():
        form.save()
        return redirect('ogrenci_list')
    return render(request, 'ogrenci/form.html', {'form': form})

# Silme
def ogrenci_delete(request, pk):
    ogrenci = get_object_or_404(Ogrenci, pk=pk)
    ogrenci.delete()
    return redirect('ogrenci_list')

🌐 7️⃣ URL Yapısı

📁 ogrenci/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.ogrenci_list, name='ogrenci_list'),
    path('ekle/', views.ogrenci_create, name='ogrenci_create'),
    path('guncelle/<int:pk>/', views.ogrenci_update, name='ogrenci_update'),
    path('sil/<int:pk>/', views.ogrenci_delete, name='ogrenci_delete'),
]

📁 okulproje/urls.py

from django.urls import path, include

urlpatterns = [
    path('', include('ogrenci.urls')),
]

🎨 8️⃣ Templates

📁 templates/ogrenci/list.html

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>Öğrenci Listesi</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="container mt-5">

    <h2>Öğrenci Listesi</h2>
    <a href="{% url 'ogrenci_create' %}" class="btn btn-success mb-3">Yeni Öğrenci</a>

    <table class="table table-bordered">
        <tr>
            <th>Ad</th>
            <th>Soyad</th>
            <th>Yaş</th>
            <th>Numara</th>
            <th>İşlemler</th>
        </tr>
        {% for ogrenci in ogrenciler %}
        <tr>
            <td>{{ ogrenci.ad }}</td>
            <td>{{ ogrenci.soyad }}</td>
            <td>{{ ogrenci.yas }}</td>
            <td>{{ ogrenci.numara }}</td>
            <td>
                <a href="{% url 'ogrenci_update' ogrenci.id %}" class="btn btn-warning btn-sm">Güncelle</a>
                <a href="{% url 'ogrenci_delete' ogrenci.id %}" class="btn btn-danger btn-sm">Sil</a>
            </td>
        </tr>
        {% endfor %}
    </table>

</body>
</html>

📁 templates/ogrenci/form.html

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>Öğrenci Form</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="container mt-5">

    <h2>Öğrenci Formu</h2>

    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="btn btn-primary">Kaydet</button>
    </form>

</body>
</html>

🚀 9️⃣ Projeyi Çalıştır

python manage.py runserver

Tarayıcıda:

http://127.0.0.1:8000/

📊 Bu Projede Öğrendiklerin

✔ Model oluşturma
✔ Migration
✔ ModelForm
✔ CRUD mantığı
✔ URL – View – Template bağlantısı
✔ Bootstrap tablo tasarımı

Yorumlar

Bu blogdaki popüler yayınlar

Pardus Üzerine Django Kurulumu

Python ile Web Geliştirme: Django App Oluşturma