EGE ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ



Benzer belgeler
Sunum Planı. Django Nedir? Django projesi oluşturmak Basit bir blog uygulaması. Şablon Kullanımı Diğer özellikleri

Kullanıldığı Başlıca Siteler

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Django Web Çerçevesi. Mete Alpaslan KATIRCIOĞLU, Emre YÜCE

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

Android Ders Notları

Python Web 2.0 Python ve Web 2.0 Son. Python ve Web 2.0. Gökmen GÖKSEL, 3 Mayıs 2007

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

DESTEK DOKÜMANI. Ürün : Tiger Enterprise/ Tiger Plus/ Go Plus/Go Bölüm : Kurulum İşlemleri

Microsoft SQL Server 2008 Oracle Mysql (Ücretsiz) (Uygulamalarımızda bunu kullanacağız) Access

İNTERNET PROGRAMCILIĞI - II

Tomcat Uygulama Sunucusunun Kurulumu. İlk olarak adresine gidiyoruz.


Bölüm 10: PHP ile Veritabanı Uygulamaları

SQL 2005 SQL STUDIO MANAGER ACP YAZILIMI KURULUM KILAVUZU

BLGM 354 DENEY 1 * GİRİŞ

EndNote Web Hızlı Başvuru kartı

MOBİL UYGULAMA GELİŞTİRME

MVC. Görüldüğü üzere 2 adet cs. Dosyası oluşturdum. Birincisi çok satır kodu (20-25) içeren büyük işlerin yapılacağı class. İsmi buyuk_isler.

OMNET Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü

KANTAR UYGULAMASI Kurulum Kılavuzu

JAVA PROGRAMLAMAYA GİRİŞ

Java Programlamaya Giriş

SIMAN KULLANIM KILAVUZU

Bu makalede 2003 sunucu, Windows 2003 Server anlamına gelmektedir. Aşağıda yapılan işlemler 2003 R2 sunucu üzerinde denenmiş ve çalıştırılmıştır.

JasperReports Server ve Ireport raporlama Sistemi Kurulumu / Kullanımı 1. Bölüm 2. Bölüm 1- JasperReports Server ve Ireport Nedir?

Java JDK (Java Development Kit) Kurulumu:

Nevşehir Hacı Bektaş Veli Üniversitesi. Moodle Uzaktan Eğitim Sistemi. Öğretim Elemanı Bilgilendirme Kılavuzu

1. VERİ TABANI KAVRAMLARI VE VERİ TABANI OLUŞTUMA

Başlangıç Ayarları.

Turquaz Windows kurulum dökümanı. ftp://ftp.mirror.ac.uk/sites/ftp.postgresql.org/binary/v7.3.1/windows/pgsql731wina1.exe

İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler:

OTURUM AÇMA ADLARI. Tavsiye Edilen Önhazırlık Enterprise Manager'i kullanabilmek.

Üst Düzey Programlama

MEB E-Posta Hizmetleri ve Outlook Programı

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

Coslat Monitor (Raporcu)

MIRACLE DATA WORKS KURULUM DOKÜMANI

Kaynak Kodlardan Derleme. Turquaz Muhasebe. Versiyon 0.2. Hüseyin Ergün. 26 Mart 2005

DENEYİMLİ PROGRAMCILAR İÇİN DJANGO'YA GİRİŞ. Serdar Dalgıç Yazılım Geliştirme Uzmanı Markafoni 23 Kasım 2013 Yeditepe Üniversitesi

Ağ Üzerinde MATLAB kurulum rehberi (Sunucu makine)

İnternet Programcılığı

Bu classı biraz açıklamak gerekirse, tam olarak şu işleri yapıyor.

1. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

Ecat 8. Hakbim Bilgi İşlem A.Ş. Versiyon

ASP.NET ile Bir Web Sitesi Oluşturma

PYTHON PROGRAMLAMA DİLİ

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

DENEME SINAVI. ECDL BAŞLANGIÇ Hesap Tablosu

Turquaz. Açık kodlu muhasebe yazılımı Turquaz Proje Grubu

CYGWIN KURULUMU ve KULLANIMI

BİL BİLGİSAYAR PROGRAMLAMA (JAVA)

INTERNET BAĞLANTISININ KURULMASI İÇİN GEREKLİ YÖNLENDİRİCİ AYARLARI

Bilgisayar Programlama

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

Flash ile Etkileşimli Öğretim Materyali Hazırlama Semineri

Android e Giriş. Öğr.Gör. Utku SOBUTAY

1. PROGRAM KURMA 1.1 LİNUX PROGRAMLARINI KURMA Yazılım Merkezi ile Program Kurma

Elektra Raporlama Sistemi Sunumu

MyEnglishLab Online Kayıt Kılavuzu 2011

Tarih: 2 Ağustos 2018 Son versiyon: 1.8. EndNote X9 Windows Multi/Site kurulum talimatları

SolidWorks Macro, SolidWorks API. Yusuf MANSUROĞLU Mühendislik Hizmetleri Müdür Yardımcısı

MOBİL UYGULAMA GELİŞTİRME

Windows 7 - IIS 7.5 üzerine PHP ve MySQL kurulumu

SQL SERVER 2005 ENTEGRE SQL (VTY) VERİ TABANI YÖNETİM KURULUMU RESİMLİ ANLATIMI. Entegre SQL kurmadan önce SQLSERVER 2005,i kuralım öncelikle.

Ders Tanıtım Sunumu. Database Managegement II. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Erişim Makina. IFS Admin Kullanım Klavuzu. Umut Aytaç Mutlu

Tavsiye Edilen Önhazırlık Temel SQL Server 2000 bilgisi edinmek.

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

Denetim Masası/Programlar/Windows özelliklerini Aç/Kapat

Program Kurulum. Turquaz Muhasebe. İçindekiler

SQL Server 2008 kurulum için Microsoft Windows Installer 4.5 ve üzeri bileşenin bilgisayarınızda kurulu olması gerekir. İndirmek için tıklayın

Kets DocPlace LOGO Entegrasyonu

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Nova Dental D Ana Makine Kurulum (Windows Server XP Home/Pro)

PHP 1. Hafta 2.Sunum

HSancak Nesne Tabanlı Programlama I Ders Notları

MEBİS Kullanım Kılavuzu. Öğretim Elemanı Yeni İstanbul Medipol Üniversitesi

Windows 10 için Java JDK 8 ve NetBeans IDE 8.2 Kurulumu Detaylı Anlatım

ACCESS DERS Tablolarda Düzenleme

Kullanım Kılavuzu Milli Eğitim Bakanlığı 2010

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

1. Mutabakat.zip dosyası açılır. 2. Mutabakat klasörü içindeki Mutabakat.exe dosyası çalıştırılır.

Microsoft Outlook 2003 Kurulumu

LogControl DL yazılımı kurulum talimatı

Open Source Coding: Python

Google Chrome Kullanıyorsanız; Microsoft Internet Explorer Kullanıyorsanız;

İNTERNET PROGRAMCILIĞI DERSİ ÇALIŞMA SORULARI

AutoCAD 2011 Kurulumu

ÖĞRENME-ÖĞRETME YÖNTEM VE TEKNİKLERİ. gösterip yaptırma, uygulamalı çalışma. Anlatım, soru-cevap, gösterip yaptırma, uygulamalı çalışma.

NPratik Yazılım Kurulum Kılavuzu. Yedekleme İşlemi

FortiGate Sertifika Yönetimi. v4.00-build /02

1. Oracle Data Miner 11g Release 2 Kurulumu Aşamaları

Öğr. Gör. Serkan AKSU 1

Data Structures Lab Güz

MAC İşletim Sistemine Sahip Makineler İçin Elektronik İmza Kurulumu

Scream! e gelen veri akışlarından bazılarını diğer bir kurum yada bilgisayarla paylaşmak için kullanılabilir.

Transkript:

EGE ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BIM454 - SUNUCU YAZILIM TEKNOLOJİLERİ LABORATUAR PROJESİ DJANGO ÖĞRETİM ÜYESİ: YRD. DOÇ. DR. CENK ERDUR ASİSTAN: ARAŞ. GÖR. TAHİR EMRE KALAYCI

İÇİNDEKİLER DJANGO... 3 Django Tasarım İlkeleri:... 3 MVC MVT (Model View Template)... 3 Model... 4 View... 4 Template... 4 KURULUM... 5 PROJE KODLARININ AÇIKLANMASI... 10

DJANGO Django, Python dili ile yazılmış, MVC mimari deseniyle tasarlanmış açık kaynaklı bir web uygulama anaçatısıdır. Temmuz 2005 te BSD lisansı ile yayınlanmıştır. Django isminin kaynağı jazz gitaristi Django Reinhardt tır. 2008 yılından itibaren Django Software Foundation tarafından geliştirilmektedir. Raporun yazıldığı tarih itibariyle son sürümü 1.2 dir. Django rapid web development için oldukça uygun bir anaçatıdır. Ortaya çıkışı da bu gereksinimden kaynaklanmıştır. Bir gazetenin web departmanında çalışan kişilerce daha kısa sürede nasıl daha iyi iş çıkarabiliriz? Sorusunun yanıtı olarak Django ortaya çıkmıştır. Django nın resmi sloganının da Zaman sınırlaması olan mükemmeliyetçiler için olması Django ve rapid web development arasındaki ilişkiyi göstermektedir. DJANGO TASARIM İLKELERI: Loose Coupling: Tasarımın önemli ilkelerinden biri loose coupling ve tight cohesion olmuştur. Anaçatının katmanları çok gerekli olmadıkça birbirleri hakkında bilgi sahibi olmamalıdırlar. Örneğin templates web requests hakkında bir şey bilmez ya da view, programcının hangi template kullandığıyla ilgilenmez. Less Code (Daha az kod): Django uygulamalarında mümkün olduğunca az kod kullanılmalıdır. Django, Python un introspection gibi dinamik yeteneklerinden tam olarak faydalanır. Quick Development (hızlı geliştirme): 21. yy da web anaçatısının amacı geliştirme sürecinin uzun, yorucu aşamalarını hızlandırmak olmalıdır. Django ile geliştirme sürecü oldukça hızlandırılmıştır. DRY (Don t Repeat Yourself Kendini Tekrar Etme): Her konsept (data, method vs.) yalnızca bir yerde bulunmalıdır/tanımlanmalıdır. Bir Django uygulaması geliştirirken aynı şeyi birden fazla yerde yazdığınızı farkederseniz, o işi yapmanın muhtemelen daha iyi bir yolu vardır. Explicit is Better Than Implicit: Kod kompakt olmalı, anlaşılırlığı yüksek olmalıdır. Consistency (Tutarlılık): Tutarlı bir anaçatı, tüm katmanları beklenen şekilde çalışan bir anaçatıdır. Anaçatının bir yönünün nasıl çalıştığını biliyorsanız diğer yönünü öğrenmeniz daha kolay olur çünkü ikisi de aynı tutarlı konsepte göre çalışıyorlardır. DJANGO DA MVC MVT(MODEL VIEW TEMPLATE) Daha önce de belirttiğimiz gibi Django bir MVC anaçatısıdır. Ancak Django da; MVC DJANGO Model Model View Template Controller View olarak adlandırılmışlardır.

MODEL Models.py dosyası içerisinde bir Python sınıfında veritabanı tablolarının tanımı tutulur. Bu sınıfa model denir. Bu sınıf kullanılarak veritabanında kayıtlar yaratılabilir/okunabilir/güncellenebilir/silinebilir. Kendini tekrar eden SQL sorguları yazma zorunluluğu ortadan kalkar. VIEW Views.py dosyasında projenin iş mantığı (business logic) yer alır. Fonksiyonlar views.py dosyası içerisindedir. TEMPLATE İçeriğin sunumdan ayrılması için kullanılır. Django geliştiricilerinin MVC yorumuna göre, view kullanıcıya sunulan veriyi tanımlar. view sadece kullanıcıya hangi verilerin gösterileceğini tanımlar, o verilerin nasıl gösterileceğiyle ilgilenmez. Bu durumda bir view belirli bir URL için bir geriçağırım fonksiyonudur. Çünkü bu geriçağırım fonksiyonu hangi datanın görüntüleneceğini belirler. Ayrıca içerikle sunumu birbirinden ayırmak gerekir. Templateler burada devreye girer. Django da hangi verinin sunulacağını view, bu verinin nasıl sunulacağını da template tanımlar. Django nun kendine has MVT (Model View Template) yapısını bu şekilde açıklayabiliriz.

KURULUM Microsoft Windows XP/Vista/7 üzerinde Django frameworkü çalıştırmak için yapılması gerekenler: Önce Python kurulmalıdır. Raporun yazıldığı tarih itibariyle en güncel Python sürümü 3.1.2 dir. Ancak bu sürüm geriye uyumlu olmadığı için 2.6.5 sürümü kullanılacaktır. Windows için Python 2.6.5, http://www.python.org/ftp/python/2.6.5/python-2.6.5.msi adresinden indirilebilir. Python kurulduktan sonra Django kurulabilir. Django yu kurmak için; Raporun yazıldığı tarih itibariyle en güncel Django sürümü 1.2 dir. Django 1.2, http://www.djangoproject.com/download/1.2/tarball/ adresinden indirilebilir. İndirilen.tar.gz uzantılı dosya WinRAR ya da benzeri bir programla açılıp Django-1.2 klasörü istenilen bir yere (örneğin C:\Django) çıkarılmalıdır. Komut satırı çalıştırılıp (Başlat -> Çalıştır -> cmd ) Django-1.2 klasörünün bulunduğu dizine gelinmelidir. Komut satırında setup.py install komutu çalıştırılarak Django nun kurulumu tamamlanmalıdır. Eclipse ile Django projesi geliştirebilmek için gerekli olan eklenti Pydev in kurulması: Help -> Install New Software tıklanmalı

Açılan pencerede Add düğmesi tıklanmalı ve http://pydev.org/updates adresi kaynak olarak eklenmelidir. Pydev seçilerek kuruluma devam edilmeli ve tamamlanmalıdır.

Eclipse de yeni bir Django projesi başlatmak için; Eclipse de File -> New -> Other tıklanmalı açılan pencerede Pydev altından Pydev Django Project seçilmelidir.

Eğer bir Django projesi ilk defa oluşturuluyosa, Python interpreter konumu Eclipse e tanıtılmalıdır. Şekilde altı çizili olan Please configure an interpreter and related preferences before proceeding tıklanmalıdır. Açılan pencerede New düğmesi tıklanmalı, Python un kurulduğu dizindeki (örneğin C:\Python26) python.exe dosyası Python interpreter olarak seçilmelidir.

PROJE KODLARININ AÇIKLANMASI Az önce proje oluşturma adımlarını görmüştük. Bu sefer proje oluştururken proje adı kısmına kitap girelim. Daha önce anlatılan şekilde proje oluşturma adımlarını tekrarlayıp projeyi oluşturun. Proje oluşturmayı tamamladığımız zaman varsayılan olarak dört adet dosyanın oluşturulduğunu göreceğiz. Bu dosyalar fonksiyon yazma amaçlı olmayıp genellikle projeyle ilgili ayarları gireceğimiz kısımları içeriyor olacak. init.py ve manage.py kaynak dosyalarıyla hiç ilgilenmeyeceğiz. settings.py ve urls.py dosyalarının ne işe yaradığından kısaca bahsedelim. settings.py dosyasında bizi ilgilendiren önemli iki kısım olacak. İlk kısım veritabanı ayarlarıyla ilgili ayarların yapıldığı kısım: DATABASE_ENGINE = 'sqlite3' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. DATABASE_NAME = 'C:/Users/mertmr/Desktop/book' database file if using sqlite3. # Or path to DATABASE_USER = '' DATABASE_PASSWORD = '' DATABASE_HOST = '' used with sqlite3. DATABASE_PORT = '' with sqlite3. # Not used with sqlite3. # Not used with sqlite3. # Set to empty string for localhost. Not # Set to empty string for default. Not used Biz sqlite veritabanı sistemini kullanacağız. Django, sqlite veritabanına geniş bir destek veriyor. Bu yüzden sqlite kullandığımız zaman gördüğümüz gibi sadece ilk iki alanı doldurmamız yeterli: DATABASE ENGINE ve DATABASE NAME. Eğer mysql, oracle vb. veritabanları kullanıyorsak gerekli bütün ayarlar burada girilmeli. Hesap erişim sorunları nedeniyle siz veritabanı adı kısmına sadece C:/ girin. Şöyle olmalı:

DATABASE_NAME = 'C:/ Şimdi fonksiyonları girebileceğimiz uygulamayı oluşturmamız gerekiyor. Uygulamayı oluşturduktan sonra bu uygulamayla ilgili ayarları da ekleyip programlamaya başlayabiliriz. Resimde görülen şekilde uygulama oluşturmaya tıklayalım ve karşınıza gelen pencereye kitap1 girelim.

kitap paketinin altında kitap1 uygulamamız oluştu. Burda bizi ilgilendiren iki dosya dışında diğerlerine dokunmayacağız. Şimdi kodları projenin içerisine atmalıyız. Verilen dosyadan bütün kodları kopyalayalım ve kitap paketinin üzerine sağ tıklayarak yapıştıralım.

Artık elimizde şöyle bir proje penceresi olmalı:

Burda tekrar karşımıza çıkan yeni init.py ve tests.py dosyalarına dokunmayacağız. Bizi ilgilendiren dosyalar views.py, models.py ve bizim oluşturacamığız template dosyaları. models.py bizim veritabanı ile ietişim kurmadaki aracımızdır. Kitap projesindeki örnek models.py dosyasını görelim. from django.db import models from test.test_imageop import MAX_LEN class Kitap(models.Model): yazar = models.charfield(max_length=150) KitapAdi = models.charfield(max_length=100) durum = models.charfield(max_length=100) kimaldi = models.charfield(max_length=100) import kısımları javaya benziyor burada. Burada veritabanı ile ilşkili tablolar kullanacağımız için models kütüphanesini import etmemiz gerekiyor.

Bu dosyanın içerisinde açacığımız her sınıf veritabanında oluşturulacak bir tablo demek. Projemiz için Kitap tablosu oluşturduk ve alanlarını tanımladık. Şimdi en önemli dosyamız olan views.py yi inceleyelim. Bu dosyada fonksiyonlarımızı oluşturacağız. Kitap projesi için yapılan views.py dosyasını görelim: # -*- coding: utf-8 -*- from django.http import HttpResponse from django.http import HttpResponseRedirect from django.shortcuts import render_to_response from kitap.kitap1.models import Kitap def kitap_giris(request): global user user = "" if request.post.get('giris',''): user = request.post['username'] return HttpResponseRedirect('/kitap_sec/') return render_to_response('kitap_giris.html') def kitap_sec(request): oduncdizi = [] oduncdizi = set(oduncdizi) mevcutdizi = [] mevcutdizi = set(mevcutdizi) mevcutkitaplar1 = Kitap.objects.all() for oduncler in mevcutkitaplar1: if oduncler.durum=="dolu":

oduncdizi.add(oduncler) for mevcutlar in mevcutkitaplar1: if mevcutlar.durum=="": mevcutdizi.add(mevcutlar) if request.post.get('odunc',''): secilenkitapid = request.post['odunc'] secilenkitap = Kitap.objects.get(id = secilenkitapid) secilen = Kitap.objects.get(id = secilenkitapid) secilen.durum = "dolu" secilen.kimaldi = user oduncdizi.add(secilen) mevcutdizi.remove(secilen) secilen.save() return render_to_response('kitap_sec.html',{'mevcutkitaplar1':mevcutkitaplar1,'odu ncdizi':oduncdizi,'mevcutdizi':mevcutdizi}) return render_to_response('kitap_sec.html',{'mevcutkitaplar1':mevcutkitaplar1,'odu ncdizi':oduncdizi,'mevcutdizi':mevcutdizi}) def kitap_ekle(request): mevcutkitaplar = Kitap.objects.all() eklemehata = [] secilen = [] secilenkitapid = [] if request.post.get('kitapekle',''): if not request.post.get('kitapadi',''): eklemehata.append('> Bos birakmayiniz!')

else: yenikitap = Kitap(yazar = request.post['yazaradi'], KitapAdi = request.post['kitapadi'], durum = "", kimaldi = "") yenikitap.save() return render_to_response('kitap_ekle.html',{'mevcutkitaplar':mevcutkitaplar}) if request.post.get('delete',''): secilenkitapid = request.post['radyo'] secilen = Kitap.objects.get(id = secilenkitapid) secilen.delete() return render_to_response('kitap_ekle.html',{'mevcutkitaplar':mevcutkitaplar}) if request.post.get('edit',''): secilenkitapid = request.post['radyo'] secilen = Kitap.objects.get(id = secilenkitapid) return render_to_response('kitap_ekle.html',{'mevcutkitaplar':mevcutkitaplar,'seci len':secilen}) if request.post.get('edit1',''): secilenkitapid = request.post['radyo1'] secilen = Kitap.objects.get(id = secilenkitapid) secilen.yazar = request.post['yazar1'] secilen.kitapadi = request.post['kitapadi1'] secilen.save() return render_to_response('kitap_ekle.html',{'mevcutkitaplar':mevcutkitaplar}) if eklemehata: return render_to_response('kitap_ekle.html',{'eklemehata':eklemehata}) return render_to_response('kitap_ekle.html',{'mevcutkitaplar':mevcutkitaplar})

Buraya göz atmadan önce templates klasörüne de bir bakalım: Üç tane dosya var. Django da mantık bu üç template dosyasını karşılayacak üç tane fonksiyonun zorunlu olarak bulunması gerekliliğidir. Adım adım göz gezdirelim. kitap_giris.html dosyası projenin başında çağırılıyor. Bu dosyada saf html bilgisi içeriyor o yüzden pek üstünde durmayacağız. Kodlarına göz attığınız zaman burada girilen kullanıcı adının yakalanması önemli sadece. Bu template dosyasını karşılayan fonksiyonu bir daha görelim. def kitap_giris(request): global user user = "" if request.post.get('giris',''): user = request.post['username'] return HttpResponseRedirect('/kitap_sec/') return render_to_response('kitap_giris.html') Template dosyasından gönderilen kullanıcı adını request.post.get ile yakalıyoruz. Burada yakaladığımız bilgiyi global değişkene atamamızın nedeni bir fonksiyon içerisinde tanımlanan değişkenin diğer fonksiyonlarda görülememesi. Biz yakaladığımız user değişkenini ilerde kitap ödünç alma ile ilişkilendireceğimiz için burda global olarak tanımladık.

Şimdi kitap_ekle template ve fonksiyonuna bakalım. Burada da az önce olduğu gibi html kodları içerisinden yollanan POSTları yakalamaya çalışacağız. Burada hazırlanan formlardan ilki olan kitap ekleme Kitap Adı ve Yazar Adı alanlarından oluşuyor. Burada girilen bilgiler ekle butonundan sonra fonkisyonumuzda yakalanıyor. if request.post.get('kitapekle',''): yenikitap = Kitap(yazar = request.post['yazaradi'], KitapAdi = request.post['kitapadi'], durum = "", kimaldi = "") yenikitap.save() return render_to_response('kitap_ekle.html',{'mevcutkitaplar1':mevcutkitaplar}) Burada ekle butonunu yakalıyoruz ve gönderdiği bilgileri veritabanına atıyoruz. models.py dosyasında Kitap sınıfı şeklinde bir veritabanı tablosu oluşturmuştuk. Burda Kitap sınıfı şeklinde yenikitap sınıfı oluşturuyoruz ve buna yakaladığımız bilgileri atıyoruz. Save() komutuyla da veritabanına bilgileri kaydediyoruz. Bu kadar kolay. Return kısmı burada önemli. Kitap_sec.py dosyasının başında bir komut çağırmıştık: mevcutkitaplar1 = Kitap.objects.all() Bu komutun anlamı Kitap tablosuna girilmiş olan bütün bilgilerin mevcutkitaplar1 objesine atanmasıdır. Return kısmında mevcutkitaplar1 i tekrar döndürmeliyizki listeleyeceğimiz kitap listesi yeni kitabın eklenmiş hali olan güncel liste olsun.

Kitap_ekle fonksiyonun geri kalan kısmında düzenleme ve silme fonksiyonları yer alıyor. Bu fonksiyonlar ekleme fonksiyonuna metot olarak benziyor. Bunları ekleme fonksiyonuyla karşılaştırarak nasıl çalıştığını görebilirsiniz. Son fonksiyonumuz olan kitap_sec den bahsedelim. Template ekran görüntüsü: Anlatımın kafa karıştırmaması amacıyla template içerisinde python kullanımını buraya bıraktık. Önce views.py deki kitap_sec fonksiyonunu inceleyelim. for oduncler in mevcutkitaplar1: if oduncler.durum=="dolu": oduncdizi.add(oduncler) for mevcutlar in mevcutkitaplar1: if mevcutlar.durum=="": mevcutdizi.add(mevcutlar) if request.post.get('odunc',''): secilenkitapid = request.post['odunc'] secilenkitap = Kitap.objects.get(id = secilenkitapid) secilen = Kitap.objects.get(id = secilenkitapid) secilen.durum = "dolu" secilen.kimaldi = user oduncdizi.add(secilen)

mevcutdizi.remove(secilen) secilen.save() İlk iki for döngüsünde Kitap veritabanındaki bütün kitapları dolaşıp hangilerinin ödünç alınmış olduğunu ve hangilerinin boşta olduğunu atıyoruz dizilere. Daha sonra if ödünç alma butonunu yakalıyor ve seçilen kitabın id alanına bakarak Kitap tablosundaki o kitabı dolu olarak işaretliyor ve veritabanın kaydediyor. Fonksiyonda işlenen genel mantık budur. Template dosyasında python kullanımını inceleyelim. Kitap_sec.html dosyasını incelediğiniz zaman şu kodlar gözünüze çarpacaktır: {% if mevcutdizi %} {% for kitap in mevcutdizi %} <tr> <td><input type="radio" name="odunc" value="{{kitap.id}}"></input></td> <td>{{kitap.yazar}}</td> <td>{{kitap.kitapadi}}</td> <td><input type="submit" name="buton" value="odunc Al"></input></td> </tr> {% endfor %} {% endif %} Burada normal html kodlarının python kodları içerisinde bloklandığını görüyoruz. (If mevcut dizi) komutunda kastedilen eğer mevcutdizi dizisi eleman içersiyorsa anlamıdır. Daha sonraki for ise bu mevcutdizi içerisindeki kitapları geziyor. Kodlar içinde {{kitap.yazar}} ve {{kitap.kitapadi}} dikkatinizi çekmeli. Bu ifadeler mevcutdizi içerisinde yer alan henüz daha ödünç alınmamış kitapların bilgilerini veritabanından alan ifadeler. Böylece html kodları içerisine gömdüğümüz bu python ifadeleriyle istediğimiz komutu uygulayabilip istediğimiz bilgiyi veritabanından çekebiliriz. Normalde html in bize sunmadığı bir çok işlevsellik geliyor böylece. Kodlardan bahsettiğimize göre artık projeyi çalıştırabiliriz. Öncelikle oluşturduğumuz tabloları eşlemeliyiz. Bunu yapmak için:

Şimdi projeyi çalıştıralım.

Bilgisarda bulunan herhangi bir web browser açın (Firefox, Internet Explorer). Adres satırına: http://127.0.0.1:8000/kitap_giris/ girin.

Herhangi bir ad girip giriş tuşuyla devam edelim. Veritabanınızda bulunan kitaplara göre liste göreceksiniz. Ödünç aldığınız kitap aşağıya Ödünç Alınmış Kitaplar listesinin yanına gönderilir. Kitap eklemek için adres satırına şunu girelim: http://127.0.0.1:8000/kitap_ekle/

Yukarıdaki formdan kitap ekleyebilir, aşağıdaki formdan da mevcut kitapları düzenleyebilir veya silebilirsiniz.