Öğ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
Yorum Gönder