Python Django ile SQLite Veritabanı İşlemleri

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'^$', views.index),
]

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ı

5.0 Ort. (100% puan) - 1 oy

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir