Öğrenci Not Takip Sistemi

 Öğrenci Not Takip Sistemi

✅ Model ilişkileri içerir
✅ Not ortalaması hesaplar
✅ CRUD işlemleri yapar
✅ Bootstrap tasarımlıdır
✅ Gerçek okul projesi seviyesindedir


🏗 1️⃣ Proje Kurulumu

django-admin startproject notsistemi
cd notsistemi
python manage.py startapp okul

⚙ 2️⃣ settings.py

INSTALLED_APPS = [
    ...
    'okul',
]

 3️⃣ MODELLER

📁 okul/models.py

from django.db import models

class Ogrenci(models.Model):
    ad = models.CharField(max_length=50)
    soyad = models.CharField(max_length=50)
    numara = models.CharField(max_length=20, unique=True)

    def ortalama(self):
        notlar = self.not_set.all()
        if notlar.exists():
            toplam = sum([n.puan for n in notlar])
            return round(toplam / notlar.count(), 2)
        return 0

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


class Ders(models.Model):
    ad = models.CharField(max_length=100)

    def __str__(self):
        return self.ad


class Not(models.Model):
    ogrenci = models.ForeignKey(Ogrenci, on_delete=models.CASCADE)
    ders = models.ForeignKey(Ders, on_delete=models.CASCADE)
    puan = models.IntegerField()

    def __str__(self):
        return f"{self.ogrenci} - {self.ders} : {self.puan}"

🔄 4️⃣ Migration

python manage.py makemigrations
python manage.py migrate

🧾 5️⃣ FORMLAR

📁 okul/forms.py

from django import forms
from .models import Ogrenci, Ders, Not

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

class DersForm(forms.ModelForm):
    class Meta:
        model = Ders
        fields = '__all__'

class NotForm(forms.ModelForm):
    class Meta:
        model = Not
        fields = '__all__'

👁 6️⃣ VIEWS (CRUD + Ortalama)

📁 okul/views.py

from django.shortcuts import render, redirect
from .models import Ogrenci, Ders, Not
from .forms import OgrenciForm, DersForm, NotForm

def anasayfa(request):
    ogrenciler = Ogrenci.objects.all()
    return render(request, 'okul/index.html', {'ogrenciler': ogrenciler})


def ogrenci_ekle(request):
    form = OgrenciForm(request.POST or None)
    if form.is_valid():
        form.save()
        return redirect('anasayfa')
    return render(request, 'okul/form.html', {'form': form, 'baslik': 'Öğrenci Ekle'})


def ders_ekle(request):
    form = DersForm(request.POST or None)
    if form.is_valid():
        form.save()
        return redirect('anasayfa')
    return render(request, 'okul/form.html', {'form': form, 'baslik': 'Ders Ekle'})


def not_ekle(request):
    form = NotForm(request.POST or None)
    if form.is_valid():
        form.save()
        return redirect('anasayfa')
    return render(request, 'okul/form.html', {'form': form, 'baslik': 'Not Ekle'})

🌐 7️⃣ URL Yapısı

📁 okul/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.anasayfa, name='anasayfa'),
    path('ogrenci-ekle/', views.ogrenci_ekle, name='ogrenci_ekle'),
    path('ders-ekle/', views.ders_ekle, name='ders_ekle'),
    path('not-ekle/', views.not_ekle, name='not_ekle'),
]

📁 notsistemi/urls.py

from django.urls import path, include

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

🎨 8️⃣ TEMPLATE DOSYALARI

📁 templates/okul/index.html

<!DOCTYPE html>
<html>
<head>
    <title>Not Sistemi</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="container mt-4">

<h2>Öğrenci Listesi</h2>

<a href="{% url 'ogrenci_ekle' %}" class="btn btn-success">Öğrenci Ekle</a>
<a href="{% url 'ders_ekle' %}" class="btn btn-primary">Ders Ekle</a>
<a href="{% url 'not_ekle' %}" class="btn btn-warning">Not Ekle</a>

<hr>

<table class="table table-bordered mt-3">
    <tr>
        <th>Ad</th>
        <th>Numara</th>
        <th>Ortalama</th>
    </tr>

    {% for ogrenci in ogrenciler %}
    <tr>
        <td>{{ ogrenci.ad }} {{ ogrenci.soyad }}</td>
        <td>{{ ogrenci.numara }}</td>
        <td>{{ ogrenci.ortalama }}</td>
    </tr>
    {% endfor %}

</table>

</body>
</html>

📁 templates/okul/form.html

<!DOCTYPE html>
<html>
<head>
    <title>{{ baslik }}</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="container mt-4">

<h2>{{ baslik }}</h2>

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

</body>
</html>

🚀 9️⃣ Çalıştırma

python manage.py runserver

Tarayıcıda:

http://127.0.0.1:8000/

🧠 Bu Projede Öğrendiklerin

✔ ForeignKey ilişkisi
✔ Model method (ortalama hesaplama)
✔ ModelForm kullanımı
✔ CRUD mantığı
✔ Bootstrap tablo tasarımı
✔ İlişkisel veritabanı yapısı

Yorumlar

Bu blogdaki popüler yayınlar

Pardus Üzerine Django Kurulumu

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