Herkese merhaba, bu makaleyi bir önceki yazımın devamı olarak kaleme alıyorum. O makalemde Django ile basit bir web sayfası yapıp bunu yine django server üzerinde çalıştırmayı anlatmıştım burada ise bu web sayfasında ekle, güncelle, sil gibi basit veritabanı işlemlerini yapmayı anlatacağım. Bu sebeple önceki makalemi okumanızı tavsiye ederim. Ayrıca veritabanı olarak kullanım kolaylığı sağladığı ve Django projesinde hazır Database Engine olarak tanımlandığı için SQLite kullanacağım database dosyasını komut satırı ile oluşturacağımız için ekstra bir şey yapmanıza gerek yok fakat verilerini kontrol etmek isterseniz herhangi bir Sqlite management studio kullanabilirsiniz. Bu konu hakkında buradaki yazımı inceleyerek SQLite hakkında bilgi edinebilirsiniz
Proje olarak önceki makalemdeki projeyi baz aldığım için onun üzerinden ilerleyeceğim. Proje klasörünüze models.py isimli modellerimizin bulunduğu bir python dosyası oluşturalım. Bu dosyanın içerisine model olarak kullanacağımız sınıflarımızı (class) belirteceğiz bunu EntityFramework‘teki Entity’lere benzetebilirsiniz. Öncelikle projenizde Sqlite kullanabilmek için settings.py dosyası içerisinde aşağıdaki gibi bir tanımlamanın olduğundan emin olun.
# Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
Ardından models.py dosyasını aşağıdaki gibi düzenleyin
from django.db import models class Lessons(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=200) class Student(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=200) surname = models.CharField(max_length=200) email = models.CharField(max_length=200) password = models.CharField(max_length=200) age = models.IntegerField(null=True) lesson = models.ForeignKey(Lessons)
Modellerinizi yukarıdaki gibi oluşturabilirsiniz. Ardından veritabanı dosyası oluşturmak ve Migration işlemlerini yapmak için manage.py dosyasının bulunduğu dizinde komut satırını çalıştırın ve “manage.py makemigrations {proje klasörünün ismi}” komutunu çalıştırın. Sonuç aşağıdaki gibi olacaktır
Bu şekilde Migration dosyalarını oluşturmuş olduk projenizin içerisinde “migrations” klasörü oluşturulmuş olacaktır. Bu klasör içerinde otomatik oluşturulmuş migration dosyalarını göreceksiniz. Şimdi bu migration’ları veritabanına uygulamak için “manage.py migrate” komutunu çalıştırın.
Bu şekilde “db.sqlite3” isimli veritabanı dosyamızı modellerimize göre oluşturduk. Modellerinize her değişiklik yaptığınızda bu işlemleri tekrarlamalısınız. Şimdi Views.py dosyası içesinde veri eklemek için bir action oluşturalım.
from django.http import * from django.utils import timezone from django.shortcuts import render from django.shortcuts import redirect from WebProject.models import Student def ekle(request): if request.method == 'POST': q = Student( name=request.POST.get("name"), surname=request.POST.get("surname"), email=request.POST.get("email"), password=request.POST.get("password"), age=request.POST.get("age"), ) q.save() return redirect(index) return render(request,'ekle.html',locals())
Url.py dosyasına “/ekle” url tanımlamasını yapmayı unutmayın. “sablonlar” klasörü içine aşağıdaki gibi bir form bulunduran ekle.html isminde bir html dosyası ekleyin.
<form method="post"> {% csrf_token %} <table border="1"> <tr> <td>Adi:</td> <td> <input type="text" name="name" value="{{ q.name }}"/> </td> </tr> <tr> <td>Soyadi:</td> <td> <input type="text" name="surname" value="{{ q.surname }}"/> </td> </tr> <tr> <td>E-Posta:</td> <td> <input type="text" name="email" value="{{ q.email }}"/> </td> </tr> <tr> <td>Sifre:</td> <td> <input type="text" name="password" value="{{ q.password }}"/> </td> </tr> <tr> <td>Yas:</td> <td> <input type="number" name="age" value="{{ q.age }}"/> </td> </tr> <tr> <td></td> <td> <button>Kaydet</button> </td> </tr> </table> </form>
“Kaydet” butonuna bastığınızda yeni bir kayıt eklemiş olacaksınız. Şimdi kayıtları listeleme sayfası yapalım. “sablonlar” klasörüne “index.html” sayfası ekleyin
<table border="1"> <thead> <tr> <th>ID</th> <th>Adi</th> <th>Soyadi</th> <th>E-Posta</th> <th>Sifre</th> <th>Yas</th> <th></th> <th></th> </tr> </thead> {% for o in result %} <tr> <td>{{ o.id }}</td> <td>{{ o.name }}</td> <td>{{ o.surname }}</td> <td>{{ o.email }}</td> <td>{{ o.password }}</td> <td>{{ o.age }}</td> <td> <a href="/duzenle/{{ o.id }}">Duzenle</a> </td> <td> <a href="/sil/{{ o.id }}">Sil</a> </td> </tr> {% endfor %} </table>
Bu sayfa için views.py dosyasına aşağıdaki gibi bir action ekleyin
def index(request): result = [] for i in Student.objects.all(): result.append(i) return render(request,'index.html',locals())
Son olarak veri güncellemek için ve veri silmek için views.py dosyasına aşağıdaki gibi action ekleyin. Bundan önce url.py dosyasına düzenleme ve silme actionları için aşağıdaki gibi tanımlama ekleyin
from django.conf.urls import url from django.contrib import admin from WebProject import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^ekle', views.ekle), url(r'^sil/(d+)', views.sil), url(r'^duzenle/(d+)', views.duzenle), url(r'^
Models.py
def duzenle(request, id): q = Student.objects.get(id=id) if request.method == 'POST': q.name = 'abc' q.surname = request.POST.get("surname") q.email = request.POST.get("email") q.password = request.POST.get("password") q.age = int(request.POST.get("age")) q.lesson_id = 1 q.save() return redirect(index) return render(request,'ekle.html',locals()) def sil(request, id): q = Student.objects.get(id=id) q.delete() return redirect(index);
Umarım faydalı oluştur. Herkese iyi kodlamalar.
Mustafa Tayyip Yetiş
Yazılım Geliştirme Uzmanı