88
itucsdb1605 IsteSen Proje Raporu Sürüm 1.0 itucsdb1605 IsteSen 30 December 2016

itucsdb1605 IsteSen Proje Raporu - Read the Docs

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje RaporuSürüm 1.0

itucsdb1605 IsteSen

30 December 2016

Page 2: itucsdb1605 IsteSen Proje Raporu - Read the Docs
Page 3: itucsdb1605 IsteSen Proje Raporu - Read the Docs

Içindekiler

1 Kullanıcı Kılavuzu 31.1 Halit Ugurgelen Tarafından Yapılan Kısımlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Mert YILDIZ Tarafından Yapılan Kısımlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Hasan Hüseyin ÇAGLAR Tarafından Yapılan Bölümler . . . . . . . . . . . . . . . . . . . . . . 131.4 Mustafa Çoban Tarafından Yapılan Kısımlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.5 Aydogdu Demirci Tarafından Gerçeklenen Varlıklar . . . . . . . . . . . . . . . . . . . . . . . . 271.6 Sevket Cerit Tarafından Yapılan Kısımlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2 Gelistirici Kılavuzu 372.1 Veri Tabanı Tasarımı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372.2 Kod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

3 Kurulum Kılavuzu 83

i

Page 4: itucsdb1605 IsteSen Proje Raporu - Read the Docs

ii

Page 5: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Team IsteSen

Members

• Mert Yıldız

• Hasan Hüseyin Çaglar

• Sevket Cerit

• Halit Ugurgelen

• Aydogdu Demirci

• Mustafa Çoban

IsteSen- Kariyer Odaklı Sosyal Medya Sitesi

Insanların, ögrencilerin, yeni mezunların, sirketlerin, üniversitelerin ve ilgili baglantılarının kariyer baglamındabirbirleriyle etkilesim kurabilecekleri bir sosyal medya platformu olarak tasarlanmıs bir sitedir. Bu sitenin veritabanı konuyla alakalı olan varlıkların gerçeklendigi çok çesitli tablolar içermekte olup, kullanıcılara da bu tablolarüzerinde ekleme, silme, seçme ve güncelleme gibi islemler yapmasına izin vermektedir.

Içindekiler 1

Page 6: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

2 Içindekiler

Page 7: itucsdb1605 IsteSen Proje Raporu - Read the Docs

BÖLÜM 1

Kullanıcı Kılavuzu

IsteSen web sayfası her türlü kullanıcının kolayca kullanabilecegi sekilde basit ve etkili bir tasarım yöntemikullanılarak tasarlandı.

1.1 Halit Ugurgelen Tarafından Yapılan Kısımlar

Burada projenin “Konular” kısmı ile ilgili bilgiler bulunmaktadır.

Sayfada bulunan en temel eleman konu listesi olup her satırda bilgi vermek amaçlı olarak konu baslıgı ile açıkla-ması; bunlara ek olarak veri ekleme veya degistirme gibi islemlerde giris veya seçme gibi isler için de seçim vegiris kutuları bulunmaktadır.

Ana islemler:

Ekleme

Konular sayfasında eklenecek olan konunun adı ile açıklaması ilgili liste elemanının yanında bulunan ilgili bos-luklara girilir, ardından da konu ekleme dügmesine tıklanır. Böylece yenilenen sayfada az önce eklenmis olan yenikonu görülebilir.

Güncelleme

Güncellenecek konu listede bulundugu yere karsılık gelen seçim kutusu ile seçilir, yeni konu adı ile açıklama daburadaki bosluklara doldurularak güncelleme dügnesine tıklanır ve sayfa yeni liste ile birlikte yenilenir.

Silme

Silinecek konu(lar) listeden seçim kutuları yoluyla seçilir ve silme dügmesine tıklanır, yenilenen sayfada listeninyeni hali görülebilir.

1.2 Mert YILDIZ Tarafından Yapılan Kısımlar

Raporun bu kısımda projede Mert YILDIZ tarafından gelistirilen sayfalar ve bu sayfaların kullanımları hakkındadetaylı olarak bilgilendirme yapılacaktır.

1.2.1 Altbilgi

Sekil 1.1: Sayfalarda Bulunan Altbilgi Kısmı

Altbilgide bulunan ögeler

3

Page 8: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

• Sirket ismi ve Kurulus Yılı: 2016 IsteSen,Inc

• Gizlilik: Sitenin gizlilik politikasına ulasmayı saglayan bir link

• Iletisim : Site yöneticileri ile iletisime geçebilmek ve sirketin iletisim bilgilerini görüntülemek amacıylaolusturulan sayfaya yönlendiren bir link

• Yerler : Sistemde kayıtlı olarak bulunan yerleri görüntülemek ve ekleme, seçme gibi islemlerin yapılabildigisayfaya yönlendiren bir link

• Back to top : Sayfanın en basına yönlendirmek için kullanılan bir link

1.2.2 Üniversiteler Sayfası

Sekil 1.2: Üniversiteler Sayfasına Erisim

Sitenin “Kategoriler” bölümünden “Üniversiteler” seçenegine tıklanarak sistemdeki üniversiteler hakkında çesitlibilgilerin edinilebilecegi ve kullanıcıların ekleme, güncelleme, silme ve seçme gibi islemler yapabilecekleri busayfaya erismeleri mümkündür.

Ekleme Islemi

Sisteme yeni bir üniversite eklemek için sitede tasarlanan form içindeki “Üniversite Adı”,”Sehri”,”Ögrenci Sayısı”ve “Türü” bilgileri eksiksiz olarak girilmelidir. Bu alanlar doldurulduktan sonra Ekle butonuna basıldıgında yeniüniversite arka planda veri tabanındaki tablolara ve sayfada da alt kısımda bulunan tablonun son satırına eklenmisoldugundan buradan görülebilir.

Burada yeni bilgilerin girilmesi sırasında dikkat edilmesi gereken bir husus, sehir bilgisi girilirken özellikle ilkharfinin büyük harfle baslaması gerektigidir.

Seçme Islemi

Üniversiteler içinden “Sehir” ve “Tür” kriterlerine göre seçme islemi yapılabilir. Bunun için sayfada bulunan“Üniversite Seç” kısımdaki “Sehir” kısmına görüntülenmek istenen sehrin ismi yazılmalı ve altındaki kontrolkutuları kullanılarak ise “Özel” yada “Devlet” tipi üniversitelerden hangilerinin seçilmek istendigi belirtilmelidir.Bu sekilde kriterler belirtildikten sonra Seç butonuna basılır ve istenen özelliklere sahip olan üniversiteler ayrı bir

4 Bölüm 1. Kullanıcı Kılavuzu

Page 9: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.3: Üniversiteler Sayfası Ekleme ve Seçme Fonksiyonları

sayfada listelenmis olarak gösterilir. Örnegin, Ankara ilindeki devlet üniversiteleri seçilmek istenirse sonuç ekranıasagıdaki sekildeki gibi olacaktır.

Bu kısımda da dikkat edilmesi gereken husus sehir yazılırken ilk harfinin büyük olması gerektigidir.

Sekil 1.4: Seçilen Üniversitelerin Gösterildigi Ekran

Güncelleme Islemi

Herhangi bir üniversite güncellenmek istendiginde sayfada yer alan üniversitelerin listelenmis oldugu tabloda ilgiliüniversitenin “Güncellensin mi?” sütunu altında bulunan “Güncelle” linkine tıklanmalıdır.

Bu sekilde güncellenmek istenen üniversitenin linkine tıklandıktan sonra seçilen üniversiteye ait bilgilerle doluhalde olan metin kutularının oldugu yeni bir güncelleme sayfası açılır. Burada üniversiteye ait istenen bilgileryenileriyle istenilen sekilde degistirildikten sonra sayfanın sonunda bulunan Güncelle butonu tıklanmalıdır. Buislemden sonra üniversiteler sayfasına geri dönülecek ve güncellenmek için seçilmis olan üniversite yeni hali ilelistenin sonunda görülebilecektir.

Silme Islemi

Herhangi bir üniversite silinmek istendiginde sayfada yer alan üniversitelerin listelenmis oldugu tabloda ilgiliüniversitenin “Silinsin mi?” sütunu altında bulunan kontrol kutusu isaretlenmelidir. Bu sekilde silinmek istenen herüniversitenin kontrol kutusu isaretlendikten sonra sayfanın sonunda bulunan Sil butonu tıklanmalıdır. Bu islemdensonra sayfa yenilenecek ve isaretlenmis olan üniversiteler sayfadan ve arka planda veri tabanından kaldırılmısolacaklardır.

1.2. Mert YILDIZ Tarafından Yapılan Kısımlar 5

Page 10: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.5: Üniversite Güncelleme

Sekil 1.6: Üniversite Güncelleme Sayfası

Sekil 1.7: Üniversite Silmek için Isaretleme Islemi

6 Bölüm 1. Kullanıcı Kılavuzu

Page 11: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.8: Üniversite Silme Islemi

Istisnalar

• Seçme islemi sırasında istenen özelliklere sahip üniversite yok ise bos sayfa açılır.

Sekil 1.9: Üniversite Bos Seçme Islemi

• Islemler için yanlıs girdi degerleri girilirse, örnegin seçme islemi için sistemde olmayan bir sehir girilirse,veya sehir hatalı girilirse, bu durumlar için hazırlanmıs özel hata sayfası açılır.

Sekil 1.10: Hata Sayfası

• Seçme islemi için “Tür” kısmında “Devlet” ve/ya “Özel” seçeneklerinden en az biri seçilmis olmalıdır,yoksa aynı sekilde sistem hata verir.

1.2.3 Sirketler Sayfası

Sitenin “Kategoriler” bölümünden “Sirketler” seçenegine tıklanarak sistemdeki sirketler hakkında çesitli bilgilerinedinilebilecegi ve kullanıcıların ekleme, güncelleme, silme ve seçme gibi islemler yapabilecekleri bu sayfayaerismeleri mümkündür.

Ekleme Islemi

Sisteme yeni bir sirket eklemek için sitede tasarlanan form içindeki “Sirket Adı”,”Sehir”, ve “Çalısan Sayısı”bilgileri eksiksiz olarak girilmelidir. Bu alanlar doldurulduktan sonra Ekle butonuna basıldıgında yeni sirket arka

1.2. Mert YILDIZ Tarafından Yapılan Kısımlar 7

Page 12: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.11: Sirketler Sayfasına Erisim

Sekil 1.12: Sirketler Sayfası Ekleme ve Seçme Fonksiyonları

8 Bölüm 1. Kullanıcı Kılavuzu

Page 13: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

planda veri tabanındaki tablolara ve sayfada da alt kısımda bulunan tablonun son satırına eklenmis oldugundanburadan görülebilir.

Burada yeni bilgilerin girilmesi sırasında dikkat edilmesi gereken husus, sehir bilgisi girilirken özellikle ilk harfi-nin büyük harfle baslaması gerektigidir.

Seçme Islemi

Sirketler içinden “Sehir” veya “Isim” kriterlerine göre seçme islemi yapılabilir. Isme göre seçim yapmak içinsayfada bulunan “Sirket Seç” kısımdaki “Sirketin ismine göre ara” kısmına görüntülenmek istenen sirketin ismiyazılmalı ve yanında bulunan Seç butonuna basılmalıdır. Yada eger sehir kriterine göre arama yapılmak isteni-yorsa “Sirketin sehrine göre ara” kısmına görüntülenmek istenen sehir bilgisi girilmeli ve ardından Seç butonunabasılmalıdır. Bu sekilde kriterler belirtildikten ve Seç butonuna basıldıktan sonra istenen özelliklere sahip olansirketler ayrı bir sayfada listelenmis olarak gösterilir. Örnegin, Ankara ilindeki sirketler seçilmek istenirse sonuçekranı asagıdaki sekildeki gibi olacaktır.

Bu kısımda da dikkat edilmesi gereken husus sehir yazılırken ilk harfinin büyük olması gerektigidir.

Sekil 1.13: Seçilen Sirketlerin Gösterildigi Ekran

Güncelleme Islemi

Herhangi bir sirket güncellenmek istendiginde sayfada yer alan sirketlerin listelenmis oldugu tabloda ilgili sirketin“Güncellensin mi?” sütunu altında bulunan “Güncelle” linkine tıklanmalıdır.

Sekil 1.14: Sirket Güncelleme

Bu sekilde güncellenmek istenen sirketin linkine tıklandıktan sonra seçilen sirkete ait bilgilerle dolu halde olanmetin kutularının oldugu yeni bir güncelleme sayfası açılır. Burada sirkete ait istenen bilgiler yenileriyle isteni-len sekilde degistirildikten sonra sayfanın sonunda bulunan Güncelle butonu tıklanmalıdır. Bu islemden sonra

1.2. Mert YILDIZ Tarafından Yapılan Kısımlar 9

Page 14: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

sirketler sayfasına geri dönülecek ve güncellenmek için seçilmis olan sirket yeni hali ile listenin sonunda görüle-bilecektir.

Sekil 1.15: Sirket Güncelleme Sayfası

Silme Islemi

Herhangi bir sirket silinmek istendiginde sayfada yer alan sirketlerin listelenmis oldugu tabloda ilgili sirketin“Silinsin mi?” sütunu altında bulunan kontrol kutusu isaretlenmelidir.

Sekil 1.16: Sirket Silmek için Isaretleme Islemi

Bu sekilde silinmek istenen her sirketin kontrol kutusu isaretlendikten sonra sayfanın sonunda bulunan Sil butonutıklanmalıdır. Bu islemden sonra sayfa yenilenecek ve isaretlenmis olan sirketler sayfadan ve arka planda veritabanından kaldırılmıs olacaklardır.

Istisnalar

• Seçme islemi sırasında istenen özelliklere sahip sirket yok ise bos sayfa açılır.

• Islemler için yanlıs girdi degerleri girilirse, örnegin seçme islemi için sistemde olmayan bir sehir girilirse,veya sehir hatalı girilirse, bu durumlar için hazırlanmıs özel hata sayfası açılır.

10 Bölüm 1. Kullanıcı Kılavuzu

Page 15: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.17: Sirket Silme Islemi

Sekil 1.18: Sirket Bos Seçme Islemi

Sekil 1.19: Hata Sayfası

Sekil 1.20: Yerler Sayfasına Erisim

1.2. Mert YILDIZ Tarafından Yapılan Kısımlar 11

Page 16: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

1.2.4 Yerler Sayfası

Sitenin “Altbilgi” bölümünden “Yerler” linkine tıklanarak sistemdeki yerler hakkında çesitli bilgilerin edinilebile-cegi ve kullanıcıların çesitli islemler yapabilecekleri bu sayfaya erismeleri mümkündür.

Sekil 1.21: Kayıtlı Yerler

Bu sayfada amaç sistemde kayıtlı olarak bulunan yerleri görüntüleyebilmek ve istenirse yeni yerler ekleyebil-mektir. Çünkü bu bilgiler diger sayfalarda bazı islemleri yapabilmek için gerekli olabilmektedir. Hali hazırdaTürkiye’nin tüm illeri plaka kodlarına göre sisteme eklenmis haldedir.

Sekil 1.22: Yerler Sayfası Ekleme Fonksiyonu

Ekleme Islemi

Sisteme yeni bir yer eklemek için sitede tasarlanan form içindeki “Yer numarası”,”Sehir”, ve “Ülke” bilgilerieksiksiz olarak girilmelidir. Bu alanlar doldurulduktan sonra Ekle butonuna basıldıgında yeni yer arka plandaveri tabanındaki tablolara ve sayfada da alt kısımda bulunan tablonun son satırına eklenmis oldugundan buradangörülebilir.

Burada yeni bilgilerin girilmesi sırasında dikkat edilmesi gereken husus, sehir bilgisi girilirken özellikle ilk harfi-nin büyük harfle baslaması gerektigidir.

12 Bölüm 1. Kullanıcı Kılavuzu

Page 17: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Diger Islemler

Yerler varlıgı için ekleme islemi dısında, silme, ve güncelleme islemleri bu varlıgın diger varlıklara baglı olmasınedeniyle kısıtlanmıstır. Bu nedenle sayfada da bu fonksiyonlar için bir arayüz tasarlanmamıstır.

Seçme islemi ise zaten tablonun baglı oldugu diger varlıkların sayfalarında(Sirketler ve Üniversiteler gibi) yapılı-yor olup, ayrıca bu sayfada da kayıtlı olan yerleri göstermek için kullanılmıstır.

1.3 Hasan Hüseyin ÇAGLAR Tarafından Yapılan Bölümler

Raporun bu bölümünde IsteSen adlı sosyal medya sitesinin Makaleler, Baglantılar ve Etkinlikler sayfaları-nın(varlıklarının) ekran görüntülerini ve bilgilerini inceleyebilirsiniz. Bu sayfalara erisim için tüm sayfalarda gö-rülebilen kategoriler sekmesine tıkladıktan sonra Makaleler, Baglantılar veya Etkinlikler seçeneklerine tıklayarakerisebilirler.

Sekil 1.23: Kategorilerden istenilen sayfalara erisim

1.3.1 MAKALELER

Makaleler sayfası kullanıcıların çogunlukla akademik kariyerlerinde önemli yer tutan makale yayınlarının bilgileritutulması amacıyla gelistirilmistir. Kullacılar yeni makale ekleyebilir, var olan makaleleri güncelleyebilir veyaonları silebilir. Kullanıcılar diledikleri zaman veritabanında var olan tüm makaleleri listeleyebilirler.

Listeleme

Makaleleri Listele alanına tıklanır. Seçim sorguları kullanılarak varlıga ait bütün mevcut kayıtlar listelenir. (Fig.1.24’ü inceleyiniz.)

Ekleme

Makale Ekle alanına tıklanır. Yeni veriler girilerek Makale ekle butonuyla onaylanır, eklenen kayıt tekrar listeleniptabloya kaydedildigi görülür. (Fig. 1.25 ve 1.26’yı inceleyiniz.)

Güncelleme

Makale Güncelle alanına tıklanır. Listeden bir kayıt ‘radiobutton’ ile seçilip onay butonuna basılır. Ilgili kayıda aitgelen veriler tekrardan degistirilip Makale Güncelle butonuna basılarak onaya gönderilir. En son olarak degisenveriler listeleme alanından gözlemlenir. (Fig. 1.27, 1.28 ve 1.29’u inceleyiniz.)

1.3. Hasan Hüseyin ÇAGLAR Tarafından Yapılan Bölümler 13

Page 18: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.24: Tüm makaleler listelenir

Sekil 1.25: Yeni olusturulacak makalenin verileri girilir

Sekil 1.26: Eklenen yeni makale listeleme alanında görülür

Sekil 1.27: Güncellenmek istenen makale seçilir

14 Bölüm 1. Kullanıcı Kılavuzu

Page 19: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.28: Yeni veriler girilir

Sekil 1.29: Güncellenen kayıt listelenir

Silme

Makale Sil alanına tıklanır. ‘CheckBox’lar ile istenilen kayıtlar seçilir, sonra Seçili Makaleleri Sil onay butonunabasılarak silme islemi yapılır. Listeleme ekranında artık silinen kayıtlar görülmez. (Fig. 1.30 ve 1.31’i inceleyiniz.)

Sekil 1.30: Silme tekli veya çoklu olabilir

1.3.2 BAGLANTILAR

Baglantılar sayfası kullanıcıların birbirleriyle arkadaslık iliskilerini belirten ya da üniversite veya benzeri kurumsalyapılar üzerinden ortaklık bagı bulunan kisilerle islemlerin gerçeklestirildigi bölümdür. Kullanıcılar kisi bazındaveya üniversite bazında filtrelemeler yaparak listemeleler yapabilir. Bir kisiye yeni baglantı eklenebilir veya birkisiye ait baglantılar tekli veya çoklu olarak silinebilir.

1.3. Hasan Hüseyin ÇAGLAR Tarafından Yapılan Bölümler 15

Page 20: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.31: Silinen makaleler artık listelenemez

Kisi Bazında Listeleme

Kisi Bazında Listeleme alanına tıklanır. Kullanıcı seçimi yapılır ve Kisiyi Seç onay butonuna basılır. Seçilenkullanıcının arkadasları ekrana listelenir. (Fig. 1.32’yi inceleyiniz.)

Sekil 1.32: Seçilen Kisiye göre gelen kayıtlar

Üniversite Bazında Listeleme

Üniversite Bazında Listeleme alanına tıklanır. Üniversite seçimi yapılır sonra Üniversiteyi Seç onay butonunatıklanır. Seçilen üniversiteye baglı kullanıcılar listelenir. (Fig. 1.33’ü inceleyiniz.)

Baglantı Ekle

Baglantı Ekle alanına tıklanır. Seçilen kullanıcıya baglantı olarak eklenmek isteyen arkadas kullanıcı seçilir, sonraBaglantıyı Onayla’ta basılır. Eklenen baglantı Kisi Bazında Listeleme alanından kontrol edilir. (Fig. 1.34 ve 1.35’iinceleyiniz.)

Baglantı Sil

Baglantı Sil alanına basılır. ‘CheckBox’lar ile seçilen kullanıcılar baglantıdan çıkarılmak üzere Seçili Baglantı-ları Sil Butonuna basılır. Silinen baglantılar artık listeleme bölümünde görünmeyecektir. (Fig. 1.36 ve 1.37’yiinceleyiniz.)

16 Bölüm 1. Kullanıcı Kılavuzu

Page 21: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.33: Seçilen üniversite altında bulunan baglantılar

Sekil 1.34: Eklemek üzere yeni bir baglantı seçilir

Sekil 1.35: Eklenen yeni baglantı da listelenir

Sekil 1.36: Silinecek baglantılar seçilir

1.3. Hasan Hüseyin ÇAGLAR Tarafından Yapılan Bölümler 17

Page 22: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.37: Baglantıların son hali de listelenir

1.3.3 ETKINLIKLER

Etkinlikler sayfası kullanıcılar tarafından olusturulan ve belli bir konu hakkında belli bir mekanda düzenlemeyiplanladıkları aktiviteler için islemlerin gerçeklestigi sayfadır. Tıpkı makalelerde oldugu gibi listeleme, ekleme,silme ve güncelleme islemleri yapılır.

Etkinlikler(Listeleme)

Etkinlikler alanına tıklanır. Seçim sorguları kullanılarak varlıga ait bütün mevcut kayıtlar listelenir. (Fig. 1.38’iinceleyiniz.)

Sekil 1.38: Tüm etkinlikler listelenir

Etkinlik Olustur

Etkinlik Olustur alanına tıklanır. Yeni veriler girilerek Etkinligi Olustur butonuyla onaylanır, eklenen kayıt tekrarlistelenip tabloya kaydedildigi görülür. (Fig. 1.39 ve 1.40’ı inceleyiniz.)

Etkinligi Kaldır

Etkinligi Kaldır alanına tıklanır. ‘CheckBox’lar ile istenilen kayıtlar seçilir, sonra Seçili Etkinlikleri Kaldır onaybutonuna basılarak silme islemi yapılır. Listeleme ekranında artık silinen kayıtlar görülmez. (Fig. 1.41 ve 1.42’yiinceleyiniz.)

Etkinligi Güncelle

Etkinligi Güncelle alanına tıklanır. Listeden bir kayıt ‘radiobutton’ ile seçilip onay butonuna basılır. Ilgili ka-yıda ait gelen veriler tekrardan degistirilip Etkinligi Güncelle butonuna basılarak onaya gönderilir. En son olarak

18 Bölüm 1. Kullanıcı Kılavuzu

Page 23: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.39: Yeni etkinligin verileri girilir

Sekil 1.40: Eklenen etkinlik listelenir

Sekil 1.41: Silinecek kayıtlar seçilir

Sekil 1.42: Silinen veriler listeden kalkar

1.3. Hasan Hüseyin ÇAGLAR Tarafından Yapılan Bölümler 19

Page 24: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

degisen veriler listeleme yalanından gözlemlenir. (Fig. 1.43, 1.44 ve 1.45’i inceleyiniz.)

Sekil 1.43: Güncellenecek etkinlik seçilir

Sekil 1.44: Yeni etkinlik verileri girlir

1.4 Mustafa Çoban Tarafından Yapılan Kısımlar

1.4.1 IS ILANLARI

Is Ilanları ile ilgili sayfalarda asagıdaki islemler gerçeklestirilebilmektedir:

• Is Ilanlarını Görüntüleme

• Yeni Is Ilanı Ekleme

• Is Ilanlarını Güncelleme

• Is Ilanlarını Silme

Bu sayfada kullanıcılar veritabanında tutulan bütün is ilanlarını tablo biçiminde görüntüleyebilirler.

Bu sayfada kullanıcılar dropdown listeden is ilanı eklemek istedikleri sirketi seçtikten sonra pozisyon ve maasbilgisini girerek “Ekle” butonu aracılıgıyla istedikleri is ilanını ekleyebilirler. Ekle butonu is ilanları görüntülemesayfasına yönlendirerek eklenen is ilanının listeden kontrol edilmesini saglamaktadır.

20 Bölüm 1. Kullanıcı Kılavuzu

Page 25: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.45: Güncellenen veri listelenir

Sekil 1.46: Is Ilanları Görüntüleme Sayfası

Sekil 1.47: Is Ilanı Ekleme Sayfası

1.4. Mustafa Çoban Tarafından Yapılan Kısımlar 21

Page 26: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.48: Is Ilanı Güncelleme Ana Sayfası

Is ilanı güncelleme sayfasında kullanıcıya öncelikle bütün is ilanları tablo halinde listelenir. Kullanıcı güncellemekistedigi is ilanının yanında bulunan güncelle linkine tıklayarak ilgili is ilanının güncelleme sayfasına yönlendirilir.

Sekil 1.49: Güncellenecek Is Ilanının Güncelleme Sayfası

Bu sayfada kullanıcının seçtigi is ilanının bilgileri önceden ilgili alanlara eklenir, bu sayede kullanıcı güncelleye-cegi is ilanının bilgilerini görür ve güncellemek istedigi bölümleri degistirdikten sonra Güncelle butonuna basarakilgili is ilanını günceller.

Is ilanı silme sayfasında kullanıcı bütün is ilanlarının bulundugu tablodan silmek istedigi is ilanlarının yanlarındabulunan seçim kutularını isaretledikten sonra Sil butonuna basarak istedigi is ilanlarını silebilir.

1.4.2 GRUPLAR

Gruplar ile ilgili sayfalarda asagıdaki islemler gerçeklestirilebilmektedir:

• Grupları ve Üyelerini Görüntüleme

• Gruplara Üye Ekleme

• Yeni Grup Olusturma

22 Bölüm 1. Kullanıcı Kılavuzu

Page 27: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.50: Is Ilanı Silme Sayfası

• Grupları Güncelleme

• Grupları Silme

Sekil 1.51: Grup Görüntüleme Sayfası

Bu sayfada bütün gruplar tablo halinde listelenmektedir. Her grubun adı ve tanımı o grubun içerigine yönlendirenlinkler olarak kullanılmaktadır. Her grubun yanında bulunan Üye ol check boxı ile kullanıcı istedigi gruba üyeolabilmektedir.

Grupların içeriginde o grupta bulunan üyelerin listeleri tablolar halinde gösterilmektedir.

Grup ekleme sayfasında grup adı ve grup tanımı bölümleri girilerek Ekle butonu aracılıgıyla yeni gruplar olustu-rulabilmektedir.

Grupları güncelleme sayfasında kullanıcıya öncelikle bütün gruplar tablo halinde listeleniyor. Kullanıcı güncelle-mek istedigi grubun yanında bulunan güncelle linkine tıklayarak ilgili grubun güncelleme sayfasına yönlendirilir.

1.4. Mustafa Çoban Tarafından Yapılan Kısımlar 23

Page 28: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.52: Grup Içerigi Görüntüleme Sayfası

Sekil 1.53: Grup Ekleme Sayfası

Sekil 1.54: Grup Güncelleme Sayfası

24 Bölüm 1. Kullanıcı Kılavuzu

Page 29: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.55: Seçilen Grubun Güncelleme Sayfası

Bu sayfada kullanıcının seçtigi grubun bilgileri önceden ilgili alanlara eklenir, bu sayede kullanıcı güncelleyecegigrubun bilgilerini görür ve güncellemek istedigi bölümleri degistirdikten sonra Güncelle butonuna basarak ilgiligrubu günceller.

Sekil 1.56: Grup Silme Sayfası

Grupları silme sayfasında kullanıcıya bütün gruplar tablo seklinde listelenir ve kullanıcı silmek istedigi gruplarınyanlarındaki seçme kutularını isaretleyerek Sil butonu aracılıgıyla istedigi grupları silebilmektedir.

1.4.3 MESAJLAR

Mesajlar ile ilgili sayfalarda asagıdaki islemler gerçeklestirilebilmektedir:

• Yeni Mesaj Gönderme

• Gelen Mesajları Görüntüleme

• Gönderilen Mesajları Görüntüleme

Yeni mesaj göndermek için kullanıcı dropdown menüden mesaj göndermek istedigi kullanıcıyı seçtikten sonramesaj kısmına mesajını yazıp Gönder butonuna basarak istedigi üyeye mesaj gönderebilmektedir.

Gelen kutusu sayfasında kullanıcıya gelen mesajlar listelenmektedir.

1.4. Mustafa Çoban Tarafından Yapılan Kısımlar 25

Page 30: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.57: Yeni Mesaj Sayfası

Sekil 1.58: Gelen Kutusu

Sekil 1.59: Giden Kutusu

26 Bölüm 1. Kullanıcı Kılavuzu

Page 31: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Gönderilen mesajlar sayfasında kullanıcının gönderdigi mesajlar listelenmektedir.

1.5 Aydogdu Demirci Tarafından Gerçeklenen Varlıklar

1.5.1 Is Ortakları Düzenleme Sayfası

Nedir: “Is Ortakları” sayfasında, ise alımlarını “IsteSen” aracılıgıyla yapan sirketler görüntülenebilir ve bu sir-ketlere ait bilgiler düzenlenebilir. “Is Ortakları” sayfasına erisim için sitenin sol üst kösesinde yerlesik bulunan“Kategoriler” baslıgı altındaki “Is Ortakları” sekmesine tıklanabilir.

Genel Görünüm: “Is Ortakları” sayfası ziyaret edildiginde ilk olarak, her bir is ortagı ismi, kurulus yılı ve ülkesigibi bilgilerin yanı sıra kendisine ait bir seçim kutucugu ile birlikte listelenmis olarak görülür.

Silme Islemi: Kayıt silmek için kullanıcı önce kaydını silmek istedigi is ortagına ait seçim kutucuguna tıklar.Sistem birden fazla kaydın aynı anda silinmesine olanak tanımaktadır. Bunun için kullanıcı bir veya birden fazlakutucugu isaretleyebilir. Kaydının silinmesi istenen is ortaklarına ait kutucuklar isaretlendikten sonra, üzerineIsaretli Is Ortagını Sil yazılı butona tıklanır ve silme islemi gerçeklestirilir.

Ekleme Islemi: Kayıt ekleme için kullanıcı önce kaydını eklemek istedigi is ortagına ait bilgileri kutucuklarayazar. Bilgilerin girisi tamamlandıktan sonra, üzerine Is Ortagı Ekle yazılı butona tıklanarak yeni is ortagı kaydılisteye eklenir.

Istisna

• Kayıt ekleme esnasında yıl bilgisi olarak bir sayı girilmelidir. Sistem yıl bilgisi olarak yalnızca sayı giril-mesine izin verir.

Güncelleme Islemi: Güncelleme ekranında kayıtlı tüm is ortaklarına bilgiler kendilerine ait form kutucuklarınayazılı ve listelenmis olarak gelir. Kullanıcı kaydını güncellemek istedigi is ortagına ait bilgileri ilgili form kutucu-guna girerek düzenler ve kaydını düzenledigi is ortagına ait Güncelle butonuna tıklar. Bu islem sonucunda ilgiliis ortagına bilgiler güncellenmis olur.

1.5. Aydogdu Demirci Tarafından Gerçeklenen Varlıklar 27

Page 32: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.60: Is Ortakları Sayfası Genel Görünümü

Sekil 1.61: Is Ortagı Kaydı Silme Ekranı

Sekil 1.62: Is Ortagı Kaydı Ekleme Ekranı

28 Bölüm 1. Kullanıcı Kılavuzu

Page 33: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.63: Is Ortagı Kaydı Güncelleme Ekranı

Istisna

• Güncelleme esnasında yıl bilgisi olarak bir sayı girilmelidir. Sistem yıl bilgisi olarak yalnızca sayı girilme-sine izin verir.

1.5.2 Projeler Düzenleme Sayfası

Nedir: “Projeler” sayfasında, ise alımlarını “IsteSen” aracılıgıyla yapan sirketlere ait projeler görüntülenebilir vebu projelere ait bilgiler düzenlenebilir. “Projeler” sayfasına erisim için sitenin sol üst kösesinde yerlesik bulunan“Kategoriler” baslıgı altındaki “Projeler” sekmesine tıklanabilir.

Genel Görünüm: “Projeler ” sayfası ziyaret edildiginde ilk olarak, her bir projenin ismi, tamamlandıgı yıl veprojeyi gerçeklestiren sirket gibi bilgilerin yanı sıra kendisine ait bir seçim kutucugu ile birlikte listelenmis olarakgörülür.

Silme Islemi: Kayıt silmek için kullanıcı önce kaydını silmek istedigi projeye ait seçim kutucuguna tıklar. Sistembirden fazla kaydın aynı anda silinmesine olanak tanımaktadır. Bunun için kullanıcı bir veya birden fazla kutucuguisaretleyebilir. Kaydının silinmesi istenen projelere ait kutucuklar isaretlendikten sonra, üzerine Isaretli ProjeyiSil yazılı butona tıklanır ve silme islemi gerçeklestirilir.

Ekleme Islemi: Kayıt eklemek için kullanıcı önce kaydını eklemek istedigi projeye ait bilgileri kutucuklara yazar.Bilgilerin girisi tamamlandıktan sonra, üzerine Proje Ekle yazılı butona tıklanarak yeni proje kaydı listeye eklenir.

Istisna

• Kayıt ekleme esnasında yıl bilgisi olarak bir sayı girilmelidir. Sistem yıl bilgisi olarak yalnızca sayı giril-mesine izin verir.

Güncelleme Islemi: Güncelleme ekranında sisteme kayıtlı tüm projelere bilgiler kendilerine ait form kutucuk-larına yazılı ve listelenmis olarak gelir. Kullanıcı kaydını güncellemek istedigi projeye ait bilgileri ilgili formkutucuguna girerek düzenler ve kaydını düzenledigi projeye ait Güncelle butonuna tıklar. Bu islem sonucundailgili projeye bilgiler güncellenmis olur.

1.5. Aydogdu Demirci Tarafından Gerçeklenen Varlıklar 29

Page 34: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.64: Projeler Sayfasına Erisim

Sekil 1.65: Projeler Sayfası Genel Görünümü

30 Bölüm 1. Kullanıcı Kılavuzu

Page 35: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.66: Proje Kaydı Silme Ekranı

Sekil 1.67: Proje Kaydı Ekleme Ekranı

Sekil 1.68: Proje Kaydı Güncelleme Ekranı

1.5. Aydogdu Demirci Tarafından Gerçeklenen Varlıklar 31

Page 36: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Istisna

• Güncelleme esnasında yıl bilgisi olarak bir sayı girilmelidir. Sistem yıl bilgisi olarak yalnızca sayı girilme-sine izin verir.

1.6 Sevket Cerit Tarafından Yapılan Kısımlar

Raporun bu kısımda projede Sevket Cerit tarafından gelistirilen sayfalar ve bu sayfaların kullanımları hakkındadetaylı olarak bilgilendirme yapılacaktır.

1.6.1 Giris Sayfası

Sekil 1.69: Kullanıcı Giris Sayfası Ekranı

Siteye kayıtlı kullanıcıların mail adreslerini ve sifrelerini girerek giris yapabilecekleri bölümdür.

1.6.2 Kayıt Ol Sayfası

Siteye kayıt olmak isteyen kullanıcılar buradan kayıt olun linkine tıklayarak kullanıcı kayıt sayfasına geçis yapa-bilirler.

Kayıt Ol Sayfası

Kayıt olmak isteyen kullanıcılar istenilen bilgilerini girerek siteye kayıt olabilirler.Tüm alanların doldurulmasızorunludur.Üniversite bilgisi için sistemde kayıtlı üniversitelerden biri girilmelidir.

1.6.3 Kullanıcı Profil Sayfası

Kullanıcı profil Sayfasına Erisim

Kullanıcılar altındaki profil linkine tıklayarak kullanıcı profil sayfasına erisilebilir.

Kullanıcı profil Sayfası

32 Bölüm 1. Kullanıcı Kılavuzu

Page 37: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.70: Kullanıcı Kayıt Sayfasına Erisim Ekranı

Sekil 1.71: Kullanıcı Kayıt Ekranı

1.6. Sevket Cerit Tarafından Yapılan Kısımlar 33

Page 38: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 1.72: Kullanıcı Profil Sayfası Erisim Ekranı

Sekil 1.73: Kullanıcı Profil Sayfası Ekranı

34 Bölüm 1. Kullanıcı Kılavuzu

Page 39: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Kullanıcı profil sayfasında kullanıcılar kayıtlı bilgilerini görüntüleyebilir.Degistirmek istedikleri bilgileri girdiktensonra submit butonuyla yeni bilgilerini sisteme kayıt edebilirler.

1.6. Sevket Cerit Tarafından Yapılan Kısımlar 35

Page 40: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

36 Bölüm 1. Kullanıcı Kılavuzu

Page 41: itucsdb1605 IsteSen Proje Raporu - Read the Docs

BÖLÜM 2

Gelistirici Kılavuzu

2.1 Veri Tabanı Tasarımı

Bu proje kapsamında 15 tablo gerçeklenmis olup, bu tablolar arasındaki iliskiler asagıdaki varlık-iliski diagramıile gösterilmistir.

Sekil 2.1: Varlık-Iliski Diagramı

37

Page 42: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Tablolar ve birbirleriyle iliskileri hakkında daha detaylı bilgi her tasarımcının kendi kısmında ayrıca verilecektir.

PK ve FK sembolleri sırasıyla birincil ve dıs anahtarları belirtir.

2.2 Kod

2.2.1 Halit Ugurgelen Tarafından Yapılan Kısımlar

Burada Konular tablosunun baslangıç degerleri ile kodları anlatılmaktadır.

Bu tabloda 3 sütun bulunmaktadır (topicID, topic, description).

Baslangıç degerleri

init.py içindeki ilgili kısımda ilk tablo degerleri INSERT sorgusu içinde yer almakta olup CREATE TABLE ileolusturulan tabloya eklenmesi yapılır:

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{topics}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DROP TABLE IF EXISTS topics CASCADE}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE topics (}

\PYG{l+s+s2}{ topicID SERIAL PRIMARY KEY,}\PYG{l+s+s2}{ topic VARCHAR(4 UNIQUE NOT NULL,}\PYG{l+s+s2}{ description VARCHAR(8 NOT NULL}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO topics (topic, description) VALUES}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Careers}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Talk about careers here!}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Engineering}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Talk about engineering here!}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Finance}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Talk about finance here!}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{International}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Talk about international topics here!}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Jobs}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Talk about jobs here!}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Languages}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Talk about languages here!}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Miscellaneous}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Talk about various stuff here!}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Technology}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Talk about technology here!}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{);}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}

Isteklerin degerlendirilmesi

server.py içindeki ilgili kısımda tablo degerlerinin uygun fonksiyona yönlendirilmesi yapılır:

={}={}@default=0=1=2=0=1=2\PYG{n+nd}{@app.route}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/konular}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{k}{def} \PYG{n+nf}{topics\PYGZus{}page}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:}

\PYG{n}{tops} \PYG{o}{=} \PYG{n}{topics}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{fn} \PYG{o}{=} \PYG{n}{Func}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}

\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{n}{tlist} \PYG{o}{=} \PYG{n}{tops}\PYG{o}{.}\PYG{n}{get\PYGZus{}topiclist}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{topics.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{topics} \PYG{o}{=} \PYG{n}{tlist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{delete\PYGZus{}selected}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{topicids} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{o}{.}\PYG{n}{getlist}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{delete\PYGZus{}selected}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{k}{for} \PYG{n}{topicID} \PYG{o+ow}{in} \PYG{n}{topicids}\PYG{p}{:}

38 Bölüm 2. Gelistirici Kılavuzu

Page 43: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{n}{tops}\PYG{o}{.}\PYG{n}{delete\PYGZus{}topic}\PYG{p}{(}\PYG{n}{topicID}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{topics\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{add}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{tops}\PYG{o}{.}\PYG{n}{add\PYGZus{}topic}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{topic}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{description}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{topics\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{update}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{tops}\PYG{o}{.}\PYG{n}{update\PYGZus{}topic}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{topicID}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{topic}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{description}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{topics\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

Sorguların gerçeklenmesi

topics.py içinde sorgu kodları ve bunların islenmesi yer alır (liste çekme, konu ekleme/silme/güncelleme):

={}={}@default=0=1=2=0=1=2\PYG{k+kn}{import} \PYG{n+nn}{psycopg2} \PYG{k+kn}{as} \PYG{n+nn}{dbapi2}

\PYG{k}{class} \PYG{n+nc}{Topics}\PYG{p}{:}\PYG{k}{def} \PYG{n+nf}{\PYGZus{}\PYGZus{}init\PYGZus{}\PYGZus{}}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{cp}\PYG{p}{)}\PYG{p}{:}

\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp} \PYG{o}{=} \PYG{n}{cp}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{id} \PYG{o}{=} \PYG{n}{topicID}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{description} \PYG{o}{=} \PYG{n}{description}\PYG{k}{return}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}topiclist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM topics}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{delete\PYGZus{}topic}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{topicID}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DELETE FROM topics WHERE topicID = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{topicID}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

\PYG{k}{def} \PYG{n+nf}{add\PYGZus{}topic}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{topic}\PYG{p}{,} \PYG{n}{description}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO topics (topic, description) VALUES (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{)}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{topic}\PYG{p}{,} \PYG{n}{description}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

\PYG{k}{def} \PYG{n+nf}{update\PYGZus{}topic}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{topicID}\PYG{p}{,} \PYG{n}{topic}\PYG{p}{,} \PYG{n}{description}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{UPDATE topics SET topic = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, description = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ WHERE topicID=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{topic}\PYG{p}{,} \PYG{n}{description}\PYG{p}{,} \PYG{n}{topicID}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Arayüz

topics.html içinde arayüz için kullanılan HTML kodu asagıdaki gibidir:

={}={}@default

2.2. Kod 39

Page 44: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

=0=1=2=0=1=2\PYGZob{}\PYGZpc{} extends \PYGZdq{}logged\PYGZus{}in\PYGZus{}layout.html\PYGZdq{} \PYGZpc{}\PYGZcb{}\PYGZob{}\PYGZpc{} block title \PYGZpc{}\PYGZcb{}Konular\PYGZob{}\PYGZpc{} endblock \PYGZpc{}\PYGZcb{}\PYGZob{}\PYGZpc{} block content \PYGZpc{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}container text\PYGZhy{}center\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{h1}\PYG{p}{\PYGZgt{}}Konular\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{h1}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{form} \PYG{n+na}{action}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} url\PYGZus{}for(\PYGZsq{}topics\PYGZus{}page\PYGZsq{}) \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{n+na}{method}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}post\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Seç\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Numara\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Konu\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Açıklama\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYGZob{}\PYGZpc{} for topicID, topic, description in topics \PYGZpc{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}checkbox\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}delete\PYGZus{}selected\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} topicID \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{p}{/}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYGZob{}\PYGZob{} topicID \PYGZcb{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYGZob{}\PYGZob{} topic \PYGZcb{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYGZob{}\PYGZob{} description \PYGZcb{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYGZob{}\PYGZpc{} endfor \PYGZpc{}\PYGZcb{}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}submit\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Sil\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}delete\PYGZdq{}} \PYG{p}{/}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{form}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}Konu ekle\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{span} \PYG{n+na}{style}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}float:left;\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{form} \PYG{n+na}{action}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} url\PYGZus{}for(\PYGZsq{}topics\PYGZus{}page\PYGZsq{}) \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{n+na}{method}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}post\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}topic:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Konu: \PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{/}\PYG{p}{\PYGZgt{}} \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}description:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Açıklama: \PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{/}\PYG{p}{\PYGZgt{}} \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}submit\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Ekle\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}add\PYGZdq{}}\PYG{p}{/}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{form}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{span}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}Konu güncelle\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{span} \PYG{n+na}{style}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}float:left;\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{form} \PYG{n+na}{action}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} url\PYGZus{}for(\PYGZsq{}topics\PYGZus{}page\PYGZsq{}) \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{n+na}{method}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}post\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}topicID:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Konu Numarası: \PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{/}\PYG{p}{\PYGZgt{}} \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}topic:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Konu: \PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{/}\PYG{p}{\PYGZgt{}} \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}description:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Açıklama: \PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{/}\PYG{p}{\PYGZgt{}} \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}submit\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Güncelle\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}update\PYGZdq{}}\PYG{p}{/}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{form}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{span}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}Konu sil\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{span} \PYG{n+na}{style}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}float:left;\PYGZdq{}}\PYG{p}{\PYGZgt{}}

40 Bölüm 2. Gelistirici Kılavuzu

Page 45: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{form} \PYG{n+na}{action}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} url\PYGZus{}for(\PYGZsq{}topics\PYGZus{}page\PYGZsq{}) \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{n+na}{method}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}post\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}topicID:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Konu Numarası: \PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{/}\PYG{p}{\PYGZgt{}} \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}submit\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Sil\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}delete\PYGZdq{}}\PYG{p}{/}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{form}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{span}\PYG{p}{\PYGZgt{}}

\PYGZob{}\PYGZpc{}endblock\PYGZpc{}\PYGZcb{}

2.2.2 Mert YILDIZ Tarafından Yapılan Kısımlar

Psycopg2 Metodunun Açıklaması

con(): PostgreSQL veri tabanına baglantı saglanmasını halleder.

cursor(): PostgreSQL komutlarının python kodunda çalıstırılmasını saglar.

execute(): Veri tabanı isleminin çalıstırılmasını saglar.(Sorgu yada komutların)

commit(): bekleyen degisiklik yada islemleri veri tabanına isler.

fetchall(): Sorgu sonucunu alır ve satırlar halinde döner.

Üniversiteler

Üniversiteleri temsil etmek için sistemde iki adet tablo gerçeklendi. Bunlardan ilki olan “universities” tablosu “id”ve “title” niteliklerinden olusan basit bir tablodur. “id” niteligi birincil anahtar olup “Serial” olarak tanımlanmıstır.Diger nitelik olan “title” da ise üniversitelerin isimleri yer almaktadır. Bu tablo site açıldıgında asagıdaki kod ileolusturulup, ilk degerleri atanmaktadır.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{universities}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DROP TABLE IF EXISTS universities CASCADE}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE universities (}\PYG{l+s+s2}{ id SERIAL PRIMARY KEY,}\PYG{l+s+s2}{ title VARCHAR(4 UNIQUE NOT NULL}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO universities (title) VALUES}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Ankara Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Gazi Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bilkent Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Hacettepe Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Orta Dogu Teknik Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Ege Üniversitesi }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Dokuz Eylül Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kocaeli Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Sakarya Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bogaziçi Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Yıldız Teknik Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Istanbul Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}

2.2. Kod 41

Page 46: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bahçesehir Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Galatasaray Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Istanbul Teknik Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özyegin Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Sabancı Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Koç Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Munzur Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Gebze Teknik Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Karadeniz Teknik Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Isık Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kadir Has Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bursa Teknik Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Fırat Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Osmangazi Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kırıkkale Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Sinop Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Atılım Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Erzincan Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Yüzüncü Yıl Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Anadolu Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Akdeniz Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Baskent Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Sehir Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Atatürk Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Yeditepe Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Marmara Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Uludag Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Düzce Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Trakya Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bilgi Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{);}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{p}{)}

\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}

Üniversiteler hakkında daha detaylı bilgilerin bulundugu diger bir tablo ise “universities_info” tablosudur. Butabloda “uni_id”,”local”,”population” ve “type” olmak üzere dört nitelik vardır. Bunlardan uni_id universities tab-losundaki id ile iliskili dıs anahtar, local ise locations tablosundaki loc_id ile iliskili bir dıs anahtardır. Bu tablodaüniversitelere ait yeri, ögrenci sayısı ve türü(özel yada devlet) gibi bilgiler tutulmaktadır. Tablonun olusturulmasıve ilk degerlerin atanması asagıdaki kod ile site açıldıgında yapılmaktadır.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{universities\PYGZus{}info}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DROP TABLE IF EXISTS universities\PYGZus{}info CASCADE}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE universities\PYGZus{}info (}\PYG{l+s+s2}{ uni\PYGZus{}id INTEGER NOT NULL REFERENCES universities(id)}\PYG{l+s+s2}{ ON DELETE CASCADE}\PYG{l+s+s2}{ ON UPDATE CASCADE,}\PYG{l+s+s2}{ local INTEGER NOT NULL REFERENCES locations(loc\PYGZus{}id)}\PYG{l+s+s2}{ ON DELETE CASCADE}\PYG{l+s+s2}{ ON UPDATE CASCADE,}\PYG{l+s+s2}{ population NUMERIC(1,}\PYG{l+s+s2}{ type VARCHAR(1,}\PYG{l+s+s2}{ UNIQUE (uni\PYGZus{}id)}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO universities\PYGZus{}info VALUES}

\PYG{l+s+s2}{ (1, 6, 15}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (2, 6, 25}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}

42 Bölüm 2. Gelistirici Kılavuzu

Page 47: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{l+s+s2}{ (3, 6, 218,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (4, 6, 125,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (5, 6, 275,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (6, 35, 25412,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (7, 35, 197,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (8, 41, 17627,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (9, 54, 657}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (1 34, 8879, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (11, 34, 869 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (12, 34, 11994, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (13, 34, 33424, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (14, 34, 11586, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (15, 34, 17215, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (16, 34, 1599}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (17, 34, 3944,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (18, 34, 3338, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (19, 62, 133}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (2 41, 1219, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (21, 61, 8879, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (22, 34, 86, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (23, 34, 11994,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (24, 16, 3384, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (25, 23, 11586,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (26, 26, 17615,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (27, 71, 511 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (28, 57, 3774,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (29, 6, 3338,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (3 24, 2 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (31, 65, 1439,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (32, 26, 38424,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (33, 7, 11586,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (34, 6, 17215, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (35, 34, 2419}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (36, 25, 7944, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (37, 34, 3338,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (38, 34, 9}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (39, 16, 4139,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (4 81, 2558, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (41, 22, 9}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Devlet}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (42, 34, 4239, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Özel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{);}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}

Üniversite Sınıfının Yapısı ve Kurucu Fonksiyonu

Üniversiteleri temsil etmek için olusturulan sınıfın yapısı elemanları ve kurucu fonksiyonu asagıdaki gibidir.

={}={}@default=0=1=2=0=1=2 \PYG{k}{class} \PYG{n+nc}{University}\PYG{p}{:} \PYG{k}{def} \PYG{n+nf}{\PYGZus{}\PYGZus{}init\PYGZus{}\PYGZus{}}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{title}\PYG{p}{,} \PYG{n}{local}\PYG{p}{,} \PYG{n}{population}\PYG{p}{,} \PYG{n+nb}{type}\PYG{p}{)}\PYG{p}{:}

\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{Title} \PYG{o}{=} \PYG{n}{title}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{Local} \PYG{o}{=} \PYG{n}{local}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{Population} \PYG{o}{=} \PYG{n}{population}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{Type} \PYG{o}{=} \PYG{n+nb}{type}

2.2. Kod 43

Page 48: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Üniversiteler Için Yazılan Fonksiyonlar

Bu varlıgın tablolarına ekleme, silme, güncelleme ve seçme islemlerinin yapılabilmesi için gerekli olan kodlarprojede “universities.py ” dosyasının altındadır.

Üniversite Ekleme

Sitenin arayüzünden girilen bilgileri kullanarak öncelikle “universities” tablosuna yeni üniversitenin adını, “uni-versities_info” tablosuna da girilen diger ilgili bilgileri ekler. Bu sekilde yeni bir üniversite eklenmis olur. Buislem yazılan kod asagıdaki gibidir.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{add\PYGZus{}university}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{title}\PYG{p}{,} \PYG{n}{local}\PYG{p}{,} \PYG{n}{population}\PYG{p}{,} \PYG{n+nb}{type}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO universities (title) VALUES (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{)}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{title}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM universities WHERE title = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{title}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{row} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchone}\PYG{p}{(}\PYG{p}{)}\PYG{n}{uni\PYGZus{}id} \PYG{o}{=} \PYG{n}{row}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT loc\PYGZus{}id FROM locations WHERE city = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{local}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{row} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchone}\PYG{p}{(}\PYG{p}{)}\PYG{n}{loca\PYGZus{}id} \PYG{o}{=} \PYG{n}{row}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO universities\PYGZus{}info (uni\PYGZus{}id,local,population,type) VALUES (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{)}\PYG{l+s+s2}{\PYGZdq{}}\PYG{o}{\PYGZpc{}}\PYG{p}{(}\PYG{n}{uni\PYGZus{}id}\PYG{p}{,}\PYG{n}{loca\PYGZus{}id}\PYG{p}{,}\PYG{n}{population}\PYG{p}{,}\PYG{n+nb}{type}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Bu ekleme fonksiyonu server.py’daki üniversiteler ile ilgili olan kısımda ekleme islemi yapılacagı zaman kullanılır.

Üniversite Silme

Arayüzdeki kontrol kutuları isaretlenen üniversitelerin id degerlerini alarak bu üniversiteleri tablodan kaldırır.Silme islemi için kullanılan kod asagıdaki gibidir. Bu kod server.py’da yazılmıs olup, eger arayüzde herhangi birkontrol kutusu isaretlenmisse çalısır. Öncelikle “universities” ardından baglantılı oldugu diger tablo olan “univer-sities_info” tablosundan kaldırılır.

={}={}@default=0=1=2=0=1=2\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{unis\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{ids} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{o}{.}\PYG{n}{getlist}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{unis\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}

\PYG{k}{for} \PYG{n+nb}{id} \PYG{o+ow}{in} \PYG{n}{ids}\PYG{p}{:}\PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{o}{.}\PYG{n}{split}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{maxsplit}\PYG{o}{=}\PYG{l+m+mi}{1}\PYG{p}{)}\PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{unis}\PYG{o}{.}\PYG{n}{delete\PYGZus{}university}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}

\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM universities}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{ulist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT uni\PYGZus{}id, locations.city, locations.country, population, type FROM universities\PYGZus{}info JOIN locations ON universities\PYGZus{}info.local = locations.loc\PYGZus{}id}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{ilist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{universities.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{UniversityList} \PYG{o}{=} \PYG{n}{ulist}\PYG{p}{,} \PYG{n}{InfoList}\PYG{o}{=}\PYG{n}{ilist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

44 Bölüm 2. Gelistirici Kılavuzu

Page 49: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Üniversite Güncelle

Üniversite güncellemek için önce arayüzde istenen üniversitenin yanındaki “Güncelle” linkine tıklanması ardındanaçılan yeni sayfada yeni bilgilerin girilerek “Güncelle” butonuna basılması gerekmektedir. Iste Html kodunda, is-tenen üniversitenin yanındaki linke tıklandıgında bu üniversitenin id degerinin gönderilmesiyle “/universiteler/id”uzantılı yeni bir sayfa açılır. Daha sonra bu id degerine sahip üniversite için yeni girilen bilgiler kullanılarakgüncelleme islemi yapılır. Html kısmındaki yeni sayfaya yönlendiren ve id degerini gönderen kod su sekildedir.

</tbody> </table>

2.2. Kod 45

Page 50: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Buradan gelen id ile yeni açılan sayfaya ait server.py daki kod ise asagıdaki gibidir. Bu koda göre öncelikle sayfa-nın metodu “GET” ise güncellenecek olan üniversitenin bilgileri yeni açılan sayfadaki metin kutularına doldurulur.Eger “POST” ise yani “Güncelle” butonuna basılırsa, seçili üniversitenin id degerine göre seçim yapılarak yeniveriler ile güncelleme islemi yapılır ve ardından üniversiteler sayfasına geri dönülür.

={}={}@default=0=1=2=0=1=2 \PYG{n+nd}{@app.route}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/universiteler/\PYGZlt{}int:id\PYGZgt{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{methods}\PYG{o}{=}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{def} \PYG{n+nf}{uni\PYGZus{}update\PYGZus{}page}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{:}

\PYG{n}{unis} \PYG{o}{=} \PYG{n}{Universities}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{fn} \PYG{o}{=} \PYG{n}{Func}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM universities WHERE id=\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{univ} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT uni\PYGZus{}id, locations.city, locations.country, population, type FROM universities\PYGZus{}info JOIN locations ON universities\PYGZus{}info.local = locations.loc\PYGZus{}id WHERE uni\PYGZus{}id=\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{infos} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{close}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{a\PYGZus{}university.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,}\PYG{n}{ID}\PYG{o}{=}\PYG{n+nb}{id}\PYG{p}{,} \PYG{n}{UniversityList} \PYG{o}{=} \PYG{n}{univ}\PYG{p}{,} \PYG{n}{InfoList}\PYG{o}{=}\PYG{n}{infos}\PYG{p}{,} \PYG{n}{current\PYGZus{}time}\PYG{o}{=}\PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}\PYG{c+c1}{\PYGZsh{}elif \PYGZsq{}universities\PYGZus{}to\PYGZus{}update\PYGZsq{} in request.form:}\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}\PYG{c+c1}{\PYGZsh{}unis.update\PYGZus{}a\PYGZus{}university(id,request.form[\PYGZsq{}uni\PYGZsq{}],request.form[\PYGZsq{}city\PYGZsq{}],request.form[\PYGZsq{}cont\PYGZsq{}],request.form [\PYGZsq{}number\PYGZsq{}],request.form[\PYGZsq{}type\PYGZsq{}])}\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{UPDATE universities SET title =}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ WHERE id=\PYGZob{}\PYGZcb{};}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{uni}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n+nb}{id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT loc\PYGZus{}id FROM locations WHERE city=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{;}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{city}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{row} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchone}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{row} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{k}{return} \PYG{n+nb+bp}{None}\PYG{n}{loca\PYGZus{}id} \PYG{o}{=} \PYG{n}{row}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{UPDATE universities\PYGZus{}info}

\PYG{l+s+s2}{ SET local=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, population=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, type=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ WHERE uni\PYGZus{}id = \PYGZob{}\PYGZcb{};}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{loca\PYGZus{}id}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form} \PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{number}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{type}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n+nb}{id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM universities}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{ulist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT uni\PYGZus{}id, locations.city, locations.country, population, type FROM universities\PYGZus{}info JOIN locations ON universities\PYGZus{}info.local = locations.loc\PYGZus{}id}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{ilist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}

\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{uni\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

Üniversite Seçme

Arayüzde girilen belirli kriterlere göre üniversite bilgilerini seçme islemi yapmak için kullanılan kısımdır. Seçmeislemi için önce bir sehir girilir, ardından bu sehirdeki özel, devlet yada her ikisi birden seçilerek istenen türbelirtilir. Yapılan bu seçimlere göre tablolardan istenen kriterlere uyan üniversiteler çekilerek yeni bir sayfadalistelenir. Bu islemler için server.py’da yazılan kod su sekildedir:

={}={}@default=0=1=2=0=1=2\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{universities\PYGZus{}to\PYGZus{}select}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{vals} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{o}{.}\PYG{n}{getlist}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{unis\PYGZus{}to\PYGZus{}select}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{n}{City}\PYG{o}{=}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{city}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{n}{length}\PYG{o}{=}\PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{vals}\PYG{p}{)}

46 Bölüm 2. Gelistirici Kılavuzu

Page 51: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{k}{if} \PYG{n}{length}\PYG{o}{==}\PYG{l+m+mi}{2}\PYG{p}{:}\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT loc\PYGZus{}id FROM locations WHERE city=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{;}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{City}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{row} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchone}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{row} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{4.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{n}{loca\PYGZus{}id} \PYG{o}{=} \PYG{n}{row}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT universities.title, universities\PYGZus{}info.population, universities\PYGZus{}info.type FROM universities JOIN universities\PYGZus{}info ON universities\PYGZus{}info.uni\PYGZus{}id = universities.id WHERE local =\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{loca\PYGZus{}id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{ilist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{ilist} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{4.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{b\PYGZus{}university.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{UniversityList} \PYG{o}{=} \PYG{n}{ilist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{n}{length}\PYG{o}{==}\PYG{l+m+mi}{1}\PYG{p}{:}\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT loc\PYGZus{}id FROM locations WHERE city=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{;}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{City}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{row} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchone}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{row} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{4.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{n}{loca\PYGZus{}id} \PYG{o}{=} \PYG{n}{row}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT universities.title, universities\PYGZus{}info.population, universities\PYGZus{}info.type FROM universities JOIN universities\PYGZus{}info ON universities\PYGZus{}info.uni\PYGZus{}id = universities.id WHERE universities\PYGZus{}info.local =\PYGZob{}\PYGZcb{} AND universities\PYGZus{}info.type=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{loca\PYGZus{}id}\PYG{p}{,}\PYG{n}{vals}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{ilist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{ilist} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{4.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{b\PYGZus{}university.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{UniversityList} \PYG{o}{=} \PYG{n}{ilist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

Görüldügü üzere öncelikle “Seç” butonuna basılması beklenir, bu butona basılırsa, “Özel” ve “Devlet” degerlerinitasıyan kontrol kutularının degerleri ve girilen sehir bilgisi alınır. Önce kontrol kutularının ikisininde mi yoksabirinin mi seçildigine bakılır. Ikiside seçildiyse girilen sehre göre seçme islemi yapılır. Eger yanlızca “Özel” veya“Devlet” seçildiyse o zaman bu kriterde seçimde göz önüne alınır.

Eger yanlıs deger girilirse hata sayfasına yönlendirilir.(404.html)

Sirketler

Sirketleri temsil etmek için sistemde “companies” tablosu gerçeklendi. Tablo “id”, “title”, “local2” ve “popula-tion” olmak üzere dört nitelikten olusmaktadır. Bunlarda sırasıyla sirketin sıra numarası(birincil anahtar olarakkullanıldı.), sirketin ismi, yer bilgisi(“locations” tablosuna dısa anahtar olarak) ve çalısan sayısı bilgileri tutul-maktadır. Bu tablo site açıldıgında asagıdaki kod ile olusturulup, ilk degerleri atanmaktadır.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{companies}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:} \PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DROP TABLE IF EXISTS companies CASCADE}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE companies (}\PYG{l+s+s2}{ id SERIAL PRIMARY KEY,}\PYG{l+s+s2}{ title VARCHAR(4 UNIQUE NOT NULL,}

2.2. Kod 47

Page 52: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{l+s+s2}{ local2 INTEGER NOT NULL REFERENCES locations(loc\PYGZus{}id)}\PYG{l+s+s2}{ ON DELETE CASCADE}\PYG{l+s+s2}{ ON UPDATE CASCADE,}\PYG{l+s+s2}{ population NUMERIC(1}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO companies(title,local2,population) VALUES}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Apple}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 34, 12),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Turkcell}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 34, 45),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Vodafone}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 34, 21),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Airties}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 34, 8),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Microsoft}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 34, 68),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Google}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 34, 17),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Avea}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 34, 17),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Akbank}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 41, 27),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Tüpras}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 41, 58),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Arkas}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 35, 9),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Logosoft}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 6, 17),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{NVIDIA}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 34, 36;}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{p}{)}

\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}

Sirket Sınıfının Yapısı ve Kurucu Fonksiyonu

Sirketleri temsil etmek için olusturulan sınıfın yapısı elemanları ve kurucu fonksiyonu asagıdaki gibidir.

={}={}@default=0=1=2=0=1=2 \PYG{k}{class} \PYG{n+nc}{Company}\PYG{p}{:} \PYG{k}{def} \PYG{n+nf}{\PYGZus{}\PYGZus{}init\PYGZus{}\PYGZus{}}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{title}\PYG{p}{,} \PYG{n}{local}\PYG{p}{,} \PYG{n}{population}\PYG{p}{)}\PYG{p}{:}

\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{Title} \PYG{o}{=} \PYG{n}{title}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{Local} \PYG{o}{=} \PYG{n}{local}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{Population} \PYG{o}{=} \PYG{n}{population}

Ssirketler Için Yazılan Fonksiyonlar

Bu varlıgın tablolarına ekleme, silme, güncelleme ve seçme islemlerinin yapılabilmesi için gerekli olan kodlarprojede “companies.py” dosyasının altındadır.

Sirket Ekleme

Sitenin arayüzünden girilen bilgileri kullanarak “companies” tablosuna yeni sirketin adını, çalısan sayısını, sehrinigibi ilgili bilgileri ekler. Bu sekilde yeni bir sirket eklenmis olur. Bu islem yazılan kod asagıdaki gibidir.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{add\PYGZus{}company}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{title}\PYG{p}{,} \PYG{n}{local}\PYG{p}{,} \PYG{n}{population}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT loc\PYGZus{}id FROM locations WHERE city = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{local}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{row} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchone}\PYG{p}{(}\PYG{p}{)}\PYG{n}{loca\PYGZus{}id} \PYG{o}{=} \PYG{n}{row}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO companies (title,local2,population) VALUES (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{)}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{title}\PYG{p}{,}\PYG{n}{loca\PYGZus{}id}\PYG{p}{,}\PYG{n}{population}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

48 Bölüm 2. Gelistirici Kılavuzu

Page 53: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Bu ekleme fonksiyonu server.py’daki sirketler ile ilgili olan kısımda ekleme islemi yapılacagı zaman kullanılır.

Sirket Silme

Arayüzdeki kontrol kutuları isaretlenen sirketlerin id degerlerini alarak bu sirketleri tablodan kaldırır. Silme islemiiçin kullanılan kod asagıdaki gibidir. Bu kod server.py’da yazılmıs olup, eger arayüzde herhangi bir kontrol kutusuisaretlenmisse çalısır.

={}={}@default=0=1=2=0=1=2\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{comps\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{ids} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{o}{.}\PYG{n}{getlist}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{comps\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}

\PYG{k}{for} \PYG{n+nb}{id} \PYG{o+ow}{in} \PYG{n}{ids}\PYG{p}{:}\PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{o}{.}\PYG{n}{split}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{maxsplit}\PYG{o}{=}\PYG{l+m+mi}{1}\PYG{p}{)}\PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{comps}\PYG{o}{.}\PYG{n}{delete\PYGZus{}company}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}

\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT id, title, locations.city, locations.country, population FROM companies JOIN locations ON companies.local2 = locations.loc\PYGZus{}id}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{clist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{companies.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{CompanyList} \PYG{o}{=} \PYG{n}{clist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

Sirket Güncelle

Sirket güncellemek için önce arayüzde istenen sirketin yanındaki “Güncelle” linkine tıklanması ardından açılanyeni sayfada yeni bilgilerin girilerek “Güncelle” butonuna basılması gerekmektedir. Iste Html kodunda, istenensirketin yanındaki linke tıklandıgında bu sirketin id degerinin gönderilmesiyle “/sirketler/id” uzantılı yeni bir sayfaaçılır. Daha sonra bu id degerine sahip sirket için yeni girilen bilgiler kullanılarak güncelleme islemi yapılır. Htmlkısmındaki yeni sayfaya yönlendiren ve id degerini gönderen kod su sekildedir.

</tbody> </table>

2.2. Kod 49

Page 54: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Buradan gelen id ile yeni açılan sayfaya ait server.py daki kod ise asagıdaki gibidir. Bu koda göre önceliklesayfanın metodu “GET” ise güncellenecek olan sirketin bilgileri yeni açılan sayfadaki metin kutularına doldurulur.Eger “POST” ise yani “Güncelle” butonuna basılırsa, seçili sirketin id degerine göre seçim yapılarak yeni verilerile güncelleme islemi yapılır ve ardından sirketler sayfasına geri dönülür.

={}={}@default=0=1=2=0=1=2 \PYG{n+nd}{@app.route}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/sirketler/\PYGZlt{}int:id\PYGZgt{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{methods}\PYG{o}{=}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{def} \PYG{n+nf}{comp\PYGZus{}update\PYGZus{}page}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{:}\PYG{n}{comps} \PYG{o}{=} \PYG{n}{Companies}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{fn} \PYG{o}{=} \PYG{n}{Func}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}

\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT id, title, locations.city, locations.country, population FROM companies JOIN locations ON companies.local2 = locations.loc\PYGZus{}id WHERE id=\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{clist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{close}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{a\PYGZus{}company.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,}\PYG{n}{ID}\PYG{o}{=}\PYG{n+nb}{id}\PYG{p}{,} \PYG{n}{CompanyList} \PYG{o}{=} \PYG{n}{clist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time}\PYG{o}{=}\PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT loc\PYGZus{}id FROM locations WHERE city=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{;}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{city}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{row} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchone}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{row} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{k}{return} \PYG{n+nb+bp}{None}\PYG{n}{loca\PYGZus{}id} \PYG{o}{=} \PYG{n}{row}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{UPDATE companies}

\PYG{l+s+s2}{ SET title=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, local2=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, population=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ WHERE id = \PYGZob{}\PYGZcb{};}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{comp}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{loca\PYGZus{}id}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{number}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n+nb}{id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT id, title, locations.city, locations.country, population FROM companies JOIN locations ON companies.local2= locations.loc\PYGZus{}id}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{clist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{company\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

Sirket Seçme

Arayüzde girilen belirli kriterlere göre sirket bilgilerini seçme islemi yapmak için kullanılan kısımdır. Seçmeislemi için sehir yada sirket ismi kriter olarak kullanılabilir. Yapılan bu seçimlere göre tablolardan istenen kriterlereuyan sirketler çekilerek yeni bir sayfada listelenir. Bu islemler için server.py’da yazılan kod su sekildedir:

={}={}@default=0=1=2=0=1=2 \PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{companies\PYGZus{}to\PYGZus{}select}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{City}\PYG{o}{=}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{city}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}

\PYG{c+c1}{\PYGZsh{}l\PYGZus{}id=fn.get\PYGZus{}id(\PYGZdq{}locations\PYGZdq{},City)}\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT loc\PYGZus{}id FROM locations WHERE city=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{;}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{City}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{row} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchone}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{row} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{4.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{n}{loca\PYGZus{}id} \PYG{o}{=} \PYG{n}{row}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT id, title, locations.city, locations.country, population FROM companies JOIN locations ON companies.local2= locations.loc\PYGZus{}id WHERE local2 =\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{loca\PYGZus{}id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{clist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}

50 Bölüm 2. Gelistirici Kılavuzu

Page 55: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{clist} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{4.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{b\PYGZus{}company.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{CompanyList} \PYG{o}{=} \PYG{n}{clist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{companies\PYGZus{}to\PYGZus{}select2}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{Title}\PYG{o}{=}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{title}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{c+c1}{\PYGZsh{}l\PYGZus{}id=fn.get\PYGZus{}id(\PYGZdq{}locations\PYGZdq{},City)}\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT id, title, locations.city, locations.country, population FROM companies JOIN locations ON companies.local2= locations.loc\PYGZus{}id WHERE title =}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{Title}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{clist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{clist} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{4.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{b\PYGZus{}company.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{CompanyList} \PYG{o}{=} \PYG{n}{clist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

Görüldügü üzere öncelikle “Seç” butonuna basılması beklenir, iki farklı “Seç” butonu vardır. Ilki olan “compa-nies_to_select” butonuna basılırsa seçme için sehir kriterine bakılacagı anlamına gelir. Bu nedenle girilen sehirdegeri kullanılarak buna uygun olan sirketler tablodan çekilerek, yeni bir sayfada listelenir. Eger ikinci buton olan“companies_to_select2” kullanılırsa bu isme göre seçme yapılacagını gösterir ve girilen isim degeri kullanılarakislem yapılır. Bulunan sonuçlar yeni bir ekranda listelenir.

Eger yanlıs deger girilirse hata sayfasına yönlendirilir.(404.html)

Hata Sayfası

Eger kullanıcı seçme gibi islemlerde yanlıs yada sistemde olmayan veriler girerse “internal server error” hatasıyerine bu hazırlanan sayfanın görünmesi saglandı. Bunun için bu kosula uygun durumlar belirlenerek server.pydosyasında gerekli yerlerde yönlendirmeler yapıldı. Örnek kullanım yerleri asagıda gösterilmistir.

Sirketler için:={}={}@default=0=1=2=0=1=2\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{companies\PYGZus{}to\PYGZus{}select2}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{Title}\PYG{o}{=}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{title}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{c+c1}{\PYGZsh{}l\PYGZus{}id=fn.get\PYGZus{}id(\PYGZdq{}locations\PYGZdq{},City)}\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT id, title, locations.city, locations.country, population FROM companies JOIN locations ON companies.local2= locations.loc\PYGZus{}id WHERE title =}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{Title}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{clist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{clist} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{4.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{b\PYGZus{}company.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{CompanyList} \PYG{o}{=} \PYG{n}{clist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

Yerler

Yerler temsil etmek için sistemde “locations” tablosu gerçeklendi. Tablo “id”, “city” ve “country” olmak üzere üçnitelikten olusmaktadır. Bunlarda sırasıyla yerin numarası(birincil anahtar olarak kullanıldı.), sehir ve ülke bilgileritutulmaktadır. Bu tablo site açıldıgında asagıdaki kod ile olusturulup, ilk degerleri atanmaktadır. Baslangıç içinTürkiye’deki 81 ilin hepsi plaka kodlarına göre eklenmistir.

2.2. Kod 51

Page 56: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{locations}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:} \PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DROP TABLE IF EXISTS locations CASCADE}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE locations (}\PYG{l+s+s2}{ loc\PYGZus{}id INTEGER PRIMARY KEY,}\PYG{l+s+s2}{ city VARCHAR(4 NOT NULL,}\PYG{l+s+s2}{ country VARCHAR(4,}\PYG{l+s+s2}{ UNIQUE (loc\PYGZus{}id),}\PYG{l+s+s2}{ UNIQUE (city)}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO locations VALUES}

\PYG{l+s+s2}{ (1, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Adana}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (2, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Adıyaman}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (3, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Afyon}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (4, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Agrı}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (5, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Amasya}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (6, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Ankara}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (7, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Antalya}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (8, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Artvin}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (9, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Aydın}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (1 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Balıkesir}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (11, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bilecik}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (12, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bingöl}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (13, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bitlis}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (14, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bolu}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (15, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Burdur}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (16, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bursa}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (17, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Çanakkale}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (18, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Çankırı}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (19, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Çorum}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (2 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Denizli}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (21, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Diyarbakır}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (22, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Edirne}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (23, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Elazıg}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (24, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Erzincan}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (25, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Erzurum}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (26, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Eskisehir}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (27, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Gaziantep}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (28, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Giresun}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (29, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Gümüshane}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (3 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Hakkari}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (31, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Hatay}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (32, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Isparta}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (33, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Mersin}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (34, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Istanbul}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (35, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Izmir}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (36, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kars}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (37, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kastamonu}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (38, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kayseri}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (39, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kırklareli}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (4 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kırsehir}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (41, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kocaeli}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (42, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Konya}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (43, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kütahya}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (44, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Malatya}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (45, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Manisa}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (46, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kahramanmaras}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}

52 Bölüm 2. Gelistirici Kılavuzu

Page 57: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{l+s+s2}{ (47, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Mardin}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (48, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Mugla}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (49, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Mus}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (5 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Nevsehir}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (51, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Nigde}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (52, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Ordu}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (53, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Rize}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (54, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Sakarya}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (55, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Samsun}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (56, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Siirt}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (57, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Sinop}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (58, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Sivas}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (59, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Tekirdag}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (6 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Tokat}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (61, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Trabzon}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (62, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Tunceli}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (63, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Sanlıurfa}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (64, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Usak}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (65, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Van}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (66, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Yozgat}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (67, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Zonguldak}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (68, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Aksaray}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (69, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bayburt}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (7 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Karaman}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (71, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kırıkkale}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (72, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Batman}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (73, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Sırnak}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (74, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bartın}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (75, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Ardahan}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (76, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Igdır}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (77, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Yalova}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (78, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Karabük}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (79, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Kilis}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (8 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Osmaniye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (81, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Düzce}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Türkiye}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{);}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}

Yerler Sınıfının Yapısı ve Kurucu Fonksiyonu

Yerleri temsil etmek için olusturulan sınıfın yapısı elemanları ve kurucu fonksiyonu asagıdaki gibidir.

={}={}@default=0=1=2=0=1=2 \PYG{k}{class} \PYG{n+nc}{Location}\PYG{p}{:} \PYG{k}{def} \PYG{n+nf}{\PYGZus{}\PYGZus{}init\PYGZus{}\PYGZus{}}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{loc\PYGZus{}id}\PYG{p}{,} \PYG{n}{city}\PYG{p}{,} \PYG{n}{country}\PYG{p}{)}\PYG{p}{:}

\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{Loc\PYGZus{}id} \PYG{o}{=} \PYG{n}{loc\PYGZus{}id}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{City} \PYG{o}{=} \PYG{n}{city}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{Country} \PYG{o}{=} \PYG{n}{country}

Yerler Için Yazılan Fonksiyonlar

Bu varlıgın tablolarına ekleme, silme, güncelleme ve seçme islemlerinin yapılabilmesi için gerekli olan kodlarprojede “locations.py” dosyasının altındadır.

2.2. Kod 53

Page 58: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Yer Ekleme

Sitenin arayüzünden girilen bilgileri kullanarak “locations” tablosuna yeni yerin numara, sehir ve ülke gibi ilgilibilgileri ekler. Bu sekilde yeni bir yer eklenmis olur. Bu islem yazılan kod asagıdaki gibidir.

={}={}@default=0=1=2=0=1=2 \PYG{k}{def} \PYG{n+nf}{add\PYGZus{}location}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n+nb}{id}\PYG{p}{,} \PYG{n}{city}\PYG{p}{,} \PYG{n}{country}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO locations (loc\PYGZus{}id,city,country) VALUES (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{)}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{,}\PYG{n}{city}\PYG{p}{,}\PYG{n}{country}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Bu ekleme fonksiyonu server.py’daki yerler ile ilgili olan kısımda ekleme islemi yapılacagı zaman kullanılır.

Yer Silme

Bu tablo diger tablolarla baglantılı oldugu(dıs anahtar ve restrict özellikten dolayı) ve bu yerlerin sistemden si-linmemesi istendigi için arayüzde bu islem yapılamamaktadır. Ancak yinede gerekli durumlarda kullanılabilirdüsüncesiyle bu islem içinde kod yazılmıstır. Bu koda göre id degerine göre silme islemi yapılır.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{delete\PYGZus{}location}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DELETE FROM locations WHERE loc\PYGZus{}id = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Yer Güncelle

Bu tablo diger tablolarla baglantılı oldugu(dıs anahtar ve restrict özellikten dolayı)için arayüzde bu islem yapıla-mamaktadır. Ancak yinede gerekli durumlarda kullanılabilir düsüncesiyle bu islem içinde kod yazılmıstır.

={}={}@default=0=1=2=0=1=2 \PYG{k}{def} \PYG{n+nf}{update\PYGZus{}location}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n+nb}{id}\PYG{p}{,} \PYG{n}{city}\PYG{p}{,} \PYG{n}{country}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{UPDATE locations SET loc\PYGZus{}id= }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, city= }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, country=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ WHERE id = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}d}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{,}\PYG{n}{city}\PYG{p}{,}\PYG{n}{country}\PYG{p}{,}\PYG{n+nb}{id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Yer Seçme

Arayüzde tüm yerleri listelemek için kullanılmıstır. Kodu asagıdaki gibidir.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}locationlist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT loc\PYGZus{}id, city, country FROM locations}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

54 Bölüm 2. Gelistirici Kılavuzu

Page 59: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

Hata Sayfası

Eger kullanıcı seçme gibi islemlerde yanlıs yada sistemde olmayan veriler girerse “internal server error” hatasıyerine bu hazırlanan sayfanın görünmesi saglandı. Bunun için bu kosula uygun durumlar belirlenerek server.pydosyasında gerekli yerlerde yönlendirmeler yapıldı. Örnek kullanım yerleri asagıda gösterilmistir.

Sirketler için:={}={}@default=0=1=2=0=1=2\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{companies\PYGZus{}to\PYGZus{}select2}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{Title}\PYG{o}{=}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{title}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{c+c1}{\PYGZsh{}l\PYGZus{}id=fn.get\PYGZus{}id(\PYGZdq{}locations\PYGZdq{},City)}\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT id, title, locations.city, locations.country, population FROM companies JOIN locations ON companies.local2= locations.loc\PYGZus{}id WHERE title =}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{Title}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{clist} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{clist} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{4.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{b\PYGZus{}company.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{CompanyList} \PYG{o}{=} \PYG{n}{clist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

2.2.3 Hasan Hüseyin ÇAGLAR Tarafından Yapılan Bölümler

Raporun bu bölümünde IsteSen adlı sosyal medya sitesinin Makaleler, Baglantılar ve Etkinlikler sayfalarının(varlıklarının) yazılım gelistirmesi ve detayları hakkında bilgi edinebilirsiniz

Veritabanı Tablolarını Hazırlama Metodu

Ilgili tabloları olusturmak ve ilk kayıtları eklemek için, init.py dosyasının class INIT: isimli sınıfı ve ona bagıolan def ArticleEventConnection(self): adlı metodu içerisinde islemler gerçeklestirilmistir, init.py dosyasınıniçerik yapısı:

={}={}@default=0=1=2=0=1=2\PYG{k+kn}{import} \PYG{n+nn}{psycopg2} \PYG{k+kn}{as} \PYG{n+nn}{dbapi2} \PYG{k}{class} \PYG{n+nc}{INIT}\PYG{p}{:}

\PYG{c+c1}{\PYGZsh{}...Other methods}\PYG{k}{def} \PYG{n+nf}{ArticleEventConnection}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}

\PYG{c+c1}{\PYGZsh{}... creating tables, inserting rows}\PYG{c+c1}{\PYGZsh{} for the articles, events and conenctions...}

articles, connections ve events tablolarının hepsi bu tanım metodu içinde olusturulmustur.

Makaleler

Makaleler tablosu articles adıyla olusturuldu. articles ikisi üniversities ve users tablosunu referans veren sütun,biri birincil anahtar olmak üzere toplamda 6 sütundan olusur. Makaleler bir üniversiteye baglı mail adresi olan birkullanıcının beli bir yılda belli bir isimde çıkardıgı makaleleri tutar.

2.2. Kod 55

Page 60: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Sekil 2.2: Tablo Diyagramları

56 Bölüm 2. Gelistirici Kılavuzu

Page 61: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

={}={}@default=0=1=2=0=1=2\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE articles (}\PYG{l+s+s2}{ ArticleId SERIAL PRIMARY KEY,}\PYG{l+s+s2}{ ArticleName VARCHAR(4) UNIQUE NOT NULL,}\PYG{l+s+s2}{ UserId INTEGER NOT NULL REFERENCES users(UserId),}\PYG{l+s+s2}{ ReleaseYear SMALLINT NOT NULL,}\PYG{l+s+s2}{ Mail VARCHAR(1) NOT NULL,}\PYG{l+s+s2}{ uni\PYGZus{}id INTEGER NOT NULL REFERENCES universities(id)}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

Ilk kayıtlar ekrandaki islemleri kolaylastırması amacıyla articles tablosuna eklendi.

={}={}@default=0=1=2=0=1=2\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO articles(ArticleName, UserId,ReleaseYear, Mail, uni\PYGZus{}id) VALUES}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Efficient algorithms for the (weighted) minimum circle problem}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,5,1982,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{[email protected]}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,5),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{3\PYGZhy{}D Mesh Geometry Compression with Set Partitioning in the Spectral Domain}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,6,21,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{[email protected]}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,15),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{The minimum covering sphere problem}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,5,1972,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{[email protected]}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,5),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Otonom araçların gelecegi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,7,25,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{[email protected]}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,3);}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

articles.py dosyasında arayüzde yapılacak islemler için gerekli sorgu metodları yazıldı; sırasıyla tüm makale lis-tesini çekme, referans verilen üniversite ve kullanıcı verilerini çekmek, makale silmek, güncellenecek veri içinkullanılan tekli makale seçimi, makale ekleme ve makale güncelleme için yazıldı.

={}={}@default=0=1=2=0=1=2 \PYG{k}{def} \PYG{n+nf}{get\PYGZus{}articlelist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT articles.ArticleId, articles.ArticleName,}

\PYG{l+s+s2}{ articles.UserId, users.FirstName AS Name, users.LastName AS SurName,}\PYG{l+s+s2}{ articles.ReleaseYear, articles.Mail, universities.title}\PYG{l+s+s2}{ FROM articles LEFT JOIN universities ON articles.uni\PYGZus{}id = universities.id}\PYG{l+s+s2}{ LEFT JOIN users ON users.UserId=articles.UserId ORDER BY articles.ArticleName ASC }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}universitylist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM universities ORDER BY title ASC}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}userlist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT UserId, concat(FirstName::text, LastName::text) AS name FROM users ORDER BY FirstName ASC}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{delete\PYGZus{}article}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ArticleId}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DELETE FROM articles WHERE ArticleId = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{ArticleId}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

2.2. Kod 57

Page 62: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

\PYG{k}{def} \PYG{n+nf}{select\PYGZus{}article}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ArticleId}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT articles.ArticleId, articles.ArticleName, articles.UserId,}

\PYG{l+s+s2}{ users.FirstName AS Name, users.lastName AS SurName, articles.ReleaseYear, articles.Mail, articles.uni\PYGZus{}id}\PYG{l+s+s2}{ FROM articles}\PYG{l+s+s2}{ LEFT JOIN users ON users.UserId=articles.UserId}\PYG{l+s+s2}{ WHERE ArticleId = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ ORDER BY ArticleId ASC}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{ArticleId}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows}\PYG{o}{=}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{add\PYGZus{}article}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ArticleName}\PYG{p}{,} \PYG{n}{UserId}\PYG{p}{,}\PYG{n}{ReleaseYear}\PYG{p}{,} \PYG{n}{Mail}\PYG{p}{,}\PYG{n}{uni\PYGZus{}id}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO articles (ArticleName, UserId, ReleaseYear,}

\PYG{l+s+s2}{ Mail, uni\PYGZus{}id) VALUES (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{)}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{ArticleName}\PYG{p}{,} \PYG{n}{UserId}\PYG{p}{,}\PYG{n}{ReleaseYear}\PYG{p}{,} \PYG{n}{Mail}\PYG{p}{,} \PYG{n}{uni\PYGZus{}id}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

\PYG{k}{def} \PYG{n+nf}{update\PYGZus{}article}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ArticleId}\PYG{p}{,} \PYG{n}{ArticleName}\PYG{p}{,} \PYG{n}{UserId}\PYG{p}{,} \PYG{n}{ReleaseYear}\PYG{p}{,} \PYG{n}{Mail}\PYG{p}{,}\PYG{n}{uni\PYGZus{}id}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{UPDATE articles SET ArticleName = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, UserId=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}

\PYG{l+s+s2}{ ReleaseYear=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, Mail=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, uni\PYGZus{}id=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ WHERE ArticleId=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{ArticleName}\PYG{p}{,} \PYG{n}{UserId}\PYG{p}{,}\PYG{n}{ReleaseYear}\PYG{p}{,} \PYG{n}{Mail}\PYG{p}{,} \PYG{n}{uni\PYGZus{}id}\PYG{p}{,} \PYG{n}{ArticleId}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Yukarıdaki metotlar server.py dosyasında articles’a baglı metotlar tarafından articles.html‘de gerekli islemlerisaglayabilmesi amacıyla kullanılıyor. Örnegin articles.html’içindeki degiskenler, listeler bu sekilde belirleniyor.articles.html de dıs anahtar ile referans verilen tablo verilerini checkbox’lara eklemek için user ve universities liste-leri kullanıldı. Diger metotlar klasik CRUD islemlerini gerçeklestirmek için kullanıldı. server.py‘ın articles_pagemetodu, articles.html ekranının ne sekilde hangi verilerle açılacagını kontrol eder.

={}={}@default=0=1=2=0=1=2 \PYG{k}{def} \PYG{n+nf}{articles\PYGZus{}page}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:}\PYG{n}{arts} \PYG{o}{=} \PYG{n}{Articles}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{fn} \PYG{o}{=} \PYG{n}{Func}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}

\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{n}{article} \PYG{o}{=} \PYG{n}{arts}\PYG{o}{.}\PYG{n}{get\PYGZus{}articlelist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{o}{=}\PYG{n+nb}{list}\PYG{p}{(}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{)}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{4}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{5}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{6}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{7}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{o}{=}\PYG{n+nb}{tuple}\PYG{p}{(}\PYG{n}{article}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{)}\PYG{n}{alist} \PYG{o}{=} \PYG{n}{arts}\PYG{o}{.}\PYG{n}{get\PYGZus{}articlelist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{unilist}\PYG{o}{=}\PYG{n}{arts}\PYG{o}{.}\PYG{n}{get\PYGZus{}universitylist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{userlist}\PYG{o}{=}\PYG{n}{arts}\PYG{o}{.}\PYG{n}{get\PYGZus{}userlist}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{articles.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{ArticleList} \PYG{o}{=} \PYG{n}{alist}\PYG{p}{,} \PYG{n}{UniversityList}\PYG{o}{=}\PYG{n}{unilist}\PYG{p}{,} \PYG{n}{UserList}\PYG{o}{=}\PYG{n}{userlist}\PYG{p}{,} \PYG{n}{article}\PYG{o}{=} \PYG{n}{article}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{articles\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{articleids} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{o}{.}\PYG{n}{getlist}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{articles\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{k}{for} \PYG{n}{ArticleId} \PYG{o+ow}{in} \PYG{n}{articleids}\PYG{p}{:}

58 Bölüm 2. Gelistirici Kılavuzu

Page 63: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{n}{arts}\PYG{o}{.}\PYG{n}{delete\PYGZus{}article}\PYG{p}{(}\PYG{n}{ArticleId}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{articles\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{select\PYGZus{}record}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{articleids} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{o}{.}\PYG{n}{getlist}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{select\PYGZus{}record}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{n}{alist} \PYG{o}{=} \PYG{n}{arts}\PYG{o}{.}\PYG{n}{get\PYGZus{}articlelist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{unilist}\PYG{o}{=}\PYG{n}{arts}\PYG{o}{.}\PYG{n}{get\PYGZus{}universitylist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{userlist}\PYG{o}{=}\PYG{n}{arts}\PYG{o}{.}\PYG{n}{get\PYGZus{}userlist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{slist}\PYG{o}{=}\PYG{n}{arts}\PYG{o}{.}\PYG{n}{select\PYGZus{}article}\PYG{p}{(}\PYG{n}{articleids}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{articles.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{ArticleList} \PYG{o}{=} \PYG{n}{alist}\PYG{p}{,} \PYG{n}{UniversityList}\PYG{o}{=}\PYG{n}{unilist}\PYG{p}{,} \PYG{n}{UserList}\PYG{o}{=}\PYG{n}{userlist}\PYG{p}{,} \PYG{n}{article}\PYG{o}{=}\PYG{n}{slist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time}\PYG{o}{=}\PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{articles\PYGZus{}to\PYGZus{}add}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{arts}\PYG{o}{.}\PYG{n}{add\PYGZus{}article}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ArticleName}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{UserId}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ReleaseYear}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Mail}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{uni\PYGZus{}id}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{articles\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{articles\PYGZus{}to\PYGZus{}update}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{arts}\PYG{o}{.}\PYG{n}{update\PYGZus{}article}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ArticleId}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ArticleName}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{UserId}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ReleaseYear}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Mail}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{uni\PYGZus{}id}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{articles\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

Metotlar aracılıgıyla veri ve is akısını söyle sıralayabiliriz : init.py -> articles.py -> server.py -> articles.html

articles.html dosyasında accordion button tasarımını gerçekleyen javascript kod parçası kullanıldı. Ekranlardakullanılan bu buton yapısına göre ilgili alan butonuna tıklayınca alt bölmenin açılması, aynı yere tıklayınca yada baska bir alanın tıklanarak aktif edilmesiylede eski alanın kapatılması html dosyası içinde bu kod yapısıylasaglanıyor.

={}={}@default=0=1=2=0=1=2 \PYGZlt{}script\PYGZgt{}

var acc = document.getElementsByClassName(\PYGZdq{}accordion\PYGZdq{});for (i = i \PYGZlt{} acc.length; i++) \PYGZob{}acc[i].onclick = function()\PYGZob{}var active = document.querySelector(\PYGZdq{}.accordion.active\PYGZdq{});

if (active \PYGZam{}\PYGZam{} active != this) \PYGZob{}active.classList.remove(\PYGZdq{}active\PYGZdq{});active.nextElementSibling.classList.remove(\PYGZdq{}show\PYGZdq{});

\PYGZcb{}this.classList.toggle(\PYGZdq{}active\PYGZdq{});this.nextElementSibling.classList.toggle(\PYGZdq{}show\PYGZdq{}); \PYGZcb{}\PYGZcb{}\PYGZlt{}/script\PYGZgt{}

Baglantılar

Baglantılar tablosu connections adıyla olusturuldu. connections ikisi users tablosunu referans veren sütun, biri bi-rincil anahtar olmak üzere toplamda 3 sütundan olusur. Baglantılar tablosu bir kullanıcıyla o kullanıcının kendisinearkadas olarak baglantı kurdugu kisileri tutar.

={}={}@default=0=1=2=0=1=2\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE connections (}\PYG{l+s+s2}{ ConnectionId SERIAL PRIMARY KEY,}\PYG{l+s+s2}{ MainUserId INT NOT NULL REFERENCES users(UserId),}\PYG{l+s+s2}{ FriendUserId INT NOT NULL REFERENCES users(UserId)}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

Ilk kayıtlar ekrandaki islemleri kolaylastırması amacıyla connections tablosuna eklendi.

={}={}@default=0=1=2=0=1=2\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO connections(MainUserId, FriendUserId) VALUES}\PYG{l+s+s2}{ (1,2),}\PYG{l+s+s2}{ (1,3),}\PYG{l+s+s2}{ (2,3),}

2.2. Kod 59

Page 64: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{l+s+s2}{ (4,5),}\PYG{l+s+s2}{ (4,2),}\PYG{l+s+s2}{ (2,5),}\PYG{l+s+s2}{ (6,7),}\PYG{l+s+s2}{ (3,5);}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

myconnections.py dosyasında arayüzde yapılacak islemler için gerekli sorgu metodları yazıldı; tüm baaglantılarlistesi, kullanıcı bazında baglantılar listesi, seçili üniversite bazında baglantılar listesi, tüm üniversiteler bazındabaglantı listesi, kullanıcı listesi, üniversite listesi,silme ve ekleme amaçları için kullanıldı.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}connectionlist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT connections.ConnectionId, u1.FirstName AS Mfname, u1.LastName AS Mlname,}

\PYG{l+s+s2}{ u2.FirstName AS Ffname, u2.LastName AS Flname}\PYG{l+s+s2}{ FROM connections}\PYG{l+s+s2}{ LEFT JOIN users u1 ON connections.MainUserId = u1.UserId}\PYG{l+s+s2}{ LEFT JOIN users u2 ON connections.FriendUserId = u2.UserId}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}connectionlistbyuser}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,}\PYG{n}{byUserId}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT connections.ConnectionId, u1.FirstName AS Mfname, u1.LastName AS Mlname,}

\PYG{l+s+s2}{ u2.FirstName AS Ffname, u2.LastName AS Flname}\PYG{l+s+s2}{ FROM connections}\PYG{l+s+s2}{ LEFT JOIN users u1 ON connections.MainUserId = u1.UserId}\PYG{l+s+s2}{ LEFT JOIN users u2 ON connections.FriendUserId = u2.UserId}\PYG{l+s+s2}{ WHERE connections.MainUserId=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} \PYG{o}{\PYGZpc{}}\PYG{p}{(}\PYG{n}{byUserId}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}connectionlistbyuniversity}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,}\PYG{n}{byUniversityId}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT users.uni, users.FirstName, users.LastName}

\PYG{l+s+s2}{ FROM users}\PYG{l+s+s2}{ LEFT JOIN universities ON universities.title = users.uni}\PYG{l+s+s2}{ WHERE universities.id=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} \PYG{o}{\PYGZpc{}}\PYG{p}{(}\PYG{n}{byUniversityId}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}universityconnectionlist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT users.uni, users.FirstName, users.LastName}

\PYG{l+s+s2}{ FROM users }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}userlist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT UserId, concat(FirstName::text, LastName::text) AS name FROM users ORDER BY FirstName ASC}\PYG{l+s+s2}{\PYGZdq{}}

60 Bölüm 2. Gelistirici Kılavuzu

Page 65: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}universitylist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM universities ORDER BY title ASC}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{delete\PYGZus{}connection}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ConnectionId}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DELETE FROM connections WHERE ConnectionId = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{ConnectionId}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

\PYG{k}{def} \PYG{n+nf}{add\PYGZus{}connection}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{MainUserId}\PYG{p}{,} \PYG{n}{FriendUserId}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO connections (MainUserId, FriendUserId) VALUES (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{)}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{MainUserId}\PYG{p}{,} \PYG{n}{FriendUserId}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Yukarıdaki metotlar server.py dosyasında connections’a baglı metotlar tarafından connectionss.html‘de gerekliislemleri saglayabilmesi amacıyla kullanılıyor. Örnegin connections.html‘içindeki degiskenler, listeler bu se-kilde belirleniyor. connections.html de dıs anahtar ile referans verilen tablo verilerini checkboxlar’a eklemek içinusers tablosundan türetilen listeler kullanıldı. Diger metotlar klasik CRUD islemlerini gerçeklestirmek için kulla-nıldı(Güncelleme Hariç). server.py‘nin connections_page metodu connections.html ekranının ne sekilde hangiverilerle açılacagını kontrol eder.

Metotlar aracılıgıyla veri ve is akısını söyle sıralayabiliriz : init.py -> myconnections.py -> server.py -> connecti-ons.html

connections.html dosyasında da articles gibi accordion button tasarımını gerçekleyen javascript kod parçası kul-lanıldı. Ekranlarda kullanılan bu buton yapısına göre ilgili alan butonuna tıklayınca alt bölmenin açılması, aynıyere tıklayınca ya da baska bir alanın tıklanarak aktif edilmesiylede eski alanın kapatılması html dosyası içindebu kod yapısıyla saglanıyor.

={}={}@default=0=1=2=0=1=2 \PYGZlt{}script\PYGZgt{}

var acc = document.getElementsByClassName(\PYGZdq{}accordion\PYGZdq{});for (i = i \PYGZlt{} acc.length; i++) \PYGZob{}acc[i].onclick = function()\PYGZob{}var active = document.querySelector(\PYGZdq{}.accordion.active\PYGZdq{});

if (active \PYGZam{}\PYGZam{} active != this) \PYGZob{}active.classList.remove(\PYGZdq{}active\PYGZdq{});active.nextElementSibling.classList.remove(\PYGZdq{}show\PYGZdq{});

\PYGZcb{}this.classList.toggle(\PYGZdq{}active\PYGZdq{});this.nextElementSibling.classList.toggle(\PYGZdq{}show\PYGZdq{}); \PYGZcb{}\PYGZcb{}\PYGZlt{}/script\PYGZgt{}

Etkinlikler

Etkinlikler tablosu events adıyla olusturuldu. events ikisi locations ve users tablolarını referans veren sütunlar, biribirincil anahtar olmak üzere toplamda 6 sütundan olusur. Etkinlikler tablosu bir kullanıcının bir yerde belli birtarihte belli bir isimle ve belli detaylarla olusturdugu etkinlik verilerini tutar.

2.2. Kod 61

Page 66: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

={}={}@default=0=1=2=0=1=2\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE events (}\PYG{l+s+s2}{ EventId SERIAL PRIMARY KEY,}\PYG{l+s+s2}{ EventName VARCHAR(3) UNIQUE NOT NULL,}\PYG{l+s+s2}{ OwnerId INTEGER NOT NULL REFERENCES users(UserId),}\PYG{l+s+s2}{ CityId INTEGER NOT NULL REFERENCES locations(loc\PYGZus{}id),}\PYG{l+s+s2}{ DateWithTime VARCHAR(5 NOT NULL,}\PYG{l+s+s2}{ Detail VARCHAR(5) NOT NULL}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

Ilk kayıtlar ekrandaki islemleri kolaylastırması amacıyla events tablosuna eklendi.

={}={}@default=0=1=2=0=1=2\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO events(EventName, OwnerId, CityId, DateWithTime, Detail) VALUES}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ITÜ Arı\PYGZhy{}Çekirdek Proje Yarısması}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,4,34,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{212.26, 13:3}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{26 yılı proje yarısması sonuçları, ITÜ Ayazaga}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Medikal alanda Görüntü Isleme Konferansı}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,2,34,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{..27, 16:}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bilgisayarla görüntü islemenin saglık alanında uygulamaları, Sabancı Üniversitesi Merkez Kampüsü}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{);}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

myevents.py dosyasında arayüzde yapılacak islemler için gerekli sorgu metodları yazıldı; sırasıyla tüm etkinliklistesini çekme, referans verilen yerler ve kullanıcı verilerini çekmek, etkinlik silmek, güncellenecek veri içinkullanılan tekli etkinlik seçimi, etkinlik ekleme ve etkinlik güncelleme için yazıldı.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}eventlist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT events.EventId, events.EventName, users.FirstName, users.LastName,}

\PYG{l+s+s2}{ locations.city, events.DateWithTime, events.Detail}\PYG{l+s+s2}{ FROM events}\PYG{l+s+s2}{ LEFT JOIN users ON events.OwnerId = users.UserId}\PYG{l+s+s2}{ LEFT JOIN locations ON events.CityId = locations.loc\PYGZus{}id }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}locationlist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT loc\PYGZus{}id, city FROM locations}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}userlist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT UserId, concat(FirstName::text, LastName::text) AS name FROM users ORDER BY FirstName ASC}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{delete\PYGZus{}event}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{EventId}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DELETE FROM events WHERE EventId = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{EventId}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

\PYG{k}{def} \PYG{n+nf}{select\PYGZus{}event}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{EventId}\PYG{p}{)}\PYG{p}{:}

62 Bölüm 2. Gelistirici Kılavuzu

Page 67: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT events.EventId, events.EventName, users.FirstName, users.LastName,}

\PYG{l+s+s2}{ locations.city, events.DateWithTime, events.Detail}\PYG{l+s+s2}{ FROM events}\PYG{l+s+s2}{ LEFT JOIN users ON events.OwnerId = users.UserId}\PYG{l+s+s2}{ LEFT JOIN locations ON events.CityId = locations.loc\PYGZus{}id}\PYG{l+s+s2}{ WHERE EventId = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ ORDER BY EventId ASC}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{EventId}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows}\PYG{o}{=}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

\PYG{k}{def} \PYG{n+nf}{add\PYGZus{}event}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{EventName}\PYG{p}{,} \PYG{n}{OwnerId}\PYG{p}{,} \PYG{n}{CityId}\PYG{p}{,} \PYG{n}{DateWithTime}\PYG{p}{,} \PYG{n}{Detail}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO events (EventName, OwnerId, CityId, DateWithTime, Detail) VALUES (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{)}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{EventName}\PYG{p}{,} \PYG{n}{OwnerId}\PYG{p}{,} \PYG{n}{CityId}\PYG{p}{,} \PYG{n}{DateWithTime}\PYG{p}{,} \PYG{n}{Detail}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

\PYG{k}{def} \PYG{n+nf}{update\PYGZus{}event}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{EventId}\PYG{p}{,} \PYG{n}{EventName}\PYG{p}{,} \PYG{n}{OwnerId}\PYG{p}{,} \PYG{n}{CityId}\PYG{p}{,} \PYG{n}{DateWithTime}\PYG{p}{,} \PYG{n}{Detail}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{UPDATE events SET EventName = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, OwnerId=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, CityId=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, DateWithTime=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, Detail=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{WHERE EventId=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{EventName}\PYG{p}{,} \PYG{n}{OwnerId}\PYG{p}{,} \PYG{n}{CityId}\PYG{p}{,} \PYG{n}{DateWithTime}\PYG{p}{,} \PYG{n}{Detail}\PYG{p}{,}\PYG{n}{EventId}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Yukarıdaki metotlar server.py dosyasında events’a baglı metotlar tarafından events.html‘de gerekli islemlerisaglayabilmesi amacıyla kullanılıyor. Örnegin events.html’içindeki degiskenler, listeler bu sekilde belirleniyor.events.html de dıs anahtar ile referans verilen tablo verilerini checkbox’a eklemek için users ve locations tab-losundan olusturulan listeler kullanıldı. Diger metotlar klasik CRUD islemlerini gerçeklestirmek için kullanıldı.server.py‘nin events_page() metodu events.html ekranının ne sekilde hangi verilerle açılacagını kontrol eder.

={}={}@default=0=1=2=0=1=2 \PYG{k}{def} \PYG{n+nf}{events\PYGZus{}page}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:}\PYG{n}{evts} \PYG{o}{=} \PYG{n}{Myevents}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{fn} \PYG{o}{=} \PYG{n}{Func}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}

\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{n}{event} \PYG{o}{=} \PYG{n}{evts}\PYG{o}{.}\PYG{n}{get\PYGZus{}eventlist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{o}{=}\PYG{n+nb}{list}\PYG{p}{(}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{)}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{4}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{5}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{6}\PYG{p}{]}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{kayıt seçiniz}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{o}{=}\PYG{n+nb}{tuple}\PYG{p}{(}\PYG{n}{event}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{)}\PYG{n}{eventlist} \PYG{o}{=} \PYG{n}{evts}\PYG{o}{.}\PYG{n}{get\PYGZus{}eventlist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{locationlist}\PYG{o}{=}\PYG{n}{evts}\PYG{o}{.}\PYG{n}{get\PYGZus{}locationlist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{userlist}\PYG{o}{=}\PYG{n}{evts}\PYG{o}{.}\PYG{n}{get\PYGZus{}userlist}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{events.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{EventList} \PYG{o}{=} \PYG{n}{eventlist}\PYG{p}{,} \PYG{n}{LocationList}\PYG{o}{=}\PYG{n}{locationlist}\PYG{p}{,} \PYG{n}{UserList}\PYG{o}{=}\PYG{n}{userlist}\PYG{p}{,} \PYG{n}{event} \PYG{o}{=} \PYG{n}{event}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{events\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{eventids} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{o}{.}\PYG{n}{getlist}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{events\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{k}{for} \PYG{n}{EventId} \PYG{o+ow}{in} \PYG{n}{eventids}\PYG{p}{:}

\PYG{n}{evts}\PYG{o}{.}\PYG{n}{delete\PYGZus{}event}\PYG{p}{(}\PYG{n}{EventId}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{events\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{select\PYGZus{}record}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{eventids} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{o}{.}\PYG{n}{getlist}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{select\PYGZus{}record}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}

2.2. Kod 63

Page 68: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{n}{eventlist} \PYG{o}{=} \PYG{n}{evts}\PYG{o}{.}\PYG{n}{get\PYGZus{}eventlist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{userlist}\PYG{o}{=}\PYG{n}{evts}\PYG{o}{.}\PYG{n}{get\PYGZus{}userlist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{locationlist}\PYG{o}{=}\PYG{n}{evts}\PYG{o}{.}\PYG{n}{get\PYGZus{}locationlist}\PYG{p}{(}\PYG{p}{)}\PYG{n}{slist}\PYG{o}{=}\PYG{n}{evts}\PYG{o}{.}\PYG{n}{select\PYGZus{}event}\PYG{p}{(}\PYG{n}{eventids}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{events.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{EventList} \PYG{o}{=} \PYG{n}{eventlist}\PYG{p}{,} \PYG{n}{LocationList}\PYG{o}{=}\PYG{n}{locationlist}\PYG{p}{,} \PYG{n}{UserList}\PYG{o}{=}\PYG{n}{userlist}\PYG{p}{,} \PYG{n}{event}\PYG{o}{=}\PYG{n}{slist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time}\PYG{o}{=}\PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{events\PYGZus{}to\PYGZus{}add}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{evts}\PYG{o}{.}\PYG{n}{add\PYGZus{}event}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{EventName}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{OwnerId}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{CityId}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{DateWithTime}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Detail}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{events\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{events\PYGZus{}to\PYGZus{}update}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{evts}\PYG{o}{.}\PYG{n}{update\PYGZus{}event}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{EventId}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{EventName}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{OwnerId}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{CityId}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{DateWithTime}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Detail}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{events\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

Metotlar aracılıgıyla veri ve is akısını söyle sıralayabiliriz : init.py -> myevents.py -> server.py -> events.html

events.html dosyasında da articles ve connections gibi accordion button tasarımını gerçekleyen javascript kod par-çası kullanıldı. Ekranlarda kullanılan bu buton yapısına göre ilgili alan butonuna tıklayınca alt bölmenin açılması,aynı yere tıklayınca ya da baska bir alanın tıklanarak aktif edilmesiylede eski alanın kapatılması html dosyasıiçinde bu kod yapısıyla saglanıyor.

={}={}@default=0=1=2=0=1=2 \PYGZlt{}script\PYGZgt{}

var acc = document.getElementsByClassName(\PYGZdq{}accordion\PYGZdq{});for (i = i \PYGZlt{} acc.length; i++) \PYGZob{}acc[i].onclick = function()\PYGZob{}var active = document.querySelector(\PYGZdq{}.accordion.active\PYGZdq{});

if (active \PYGZam{}\PYGZam{} active != this) \PYGZob{}active.classList.remove(\PYGZdq{}active\PYGZdq{});active.nextElementSibling.classList.remove(\PYGZdq{}show\PYGZdq{});

\PYGZcb{}this.classList.toggle(\PYGZdq{}active\PYGZdq{});this.nextElementSibling.classList.toggle(\PYGZdq{}show\PYGZdq{}); \PYGZcb{}\PYGZcb{}\PYGZlt{}/script\PYGZgt{}

2.2.4 Mustafa Çoban Tarafından Yapılan Kısımlar

Bu proje kapsamında Jobs, Groups, Messages ve Membership tabloları benim tarafımdan olusturuldu.

Jobs Tablosu Içerigi={}={}@default=0=1=2=0=1=2\PYG{n}{ID} \PYG{n+nb}{SERIAL} \PYG{k}{PRIMARY} \PYG{k}{KEY}\PYG{p}{,}\PYG{k}{Position} \PYG{n+nb}{VARCHAR}\PYG{p}{(}\PYG{l+m+mi}{4}\PYG{p}{)} \PYG{k}{NOT} \PYG{k}{NULL}\PYG{p}{,}\PYG{n}{Salary} \PYG{n+nb}{INT} \PYG{k}{NOT} \PYG{k}{NULL}\PYG{p}{,}\PYG{n}{CompanyId} \PYG{n+nb}{INT} \PYG{k}{REFERENCES} \PYG{n}{COMPANIES}\PYG{p}{(}\PYG{n}{id}\PYG{p}{)}

Groups Tablosu Içerigi={}={}@default=0=1=2=0=1=2\PYG{n}{ID} \PYG{n+nb}{SERIAL} \PYG{k}{PRIMARY} \PYG{k}{KEY}\PYG{p}{,}\PYG{n}{GroupName} \PYG{n+nb}{VARCHAR}\PYG{p}{(}\PYG{l+m+mi}{4}\PYG{p}{)} \PYG{k}{NOT} \PYG{k}{NULL}\PYG{p}{,}\PYG{n}{Description} \PYG{n+nb}{VARCHAR}\PYG{p}{(}\PYG{l+m+mi}{2}\PYG{p}{)}

Messages Tablosu Içerigi={}={}@default

64 Bölüm 2. Gelistirici Kılavuzu

Page 69: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

=0=1=2=0=1=2\PYG{n}{ID} \PYG{n+nb}{SERIAL} \PYG{k}{PRIMARY} \PYG{k}{KEY}\PYG{p}{,}\PYG{n}{SenderID} \PYG{n+nb}{INT} \PYG{k}{REFERENCES} \PYG{n}{USERS}\PYG{p}{(}\PYG{n}{UserId}\PYG{p}{)}\PYG{p}{,}\PYG{n}{ReceiverID} \PYG{n+nb}{INT} \PYG{k}{REFERENCES} \PYG{n}{USERS}\PYG{p}{(}\PYG{n}{UserId}\PYG{p}{)}\PYG{p}{,}\PYG{n+nb}{Text} \PYG{n+nb}{VARCHAR}\PYG{p}{(}\PYG{l+m+mi}{2}\PYG{p}{)} \PYG{k}{NOT} \PYG{k}{NULL}

Membership Tablosu Içerigi={}={}@default=0=1=2=0=1=2\PYG{n}{GROUPID} \PYG{n+nb}{INT} \PYG{k}{NOT} \PYG{k}{NULL} \PYG{k}{REFERENCES} \PYG{n}{GROUPS}\PYG{p}{(}\PYG{n}{ID}\PYG{p}{)} \PYG{k}{ON} \PYG{k}{DELETE} \PYG{k}{CASCADE}\PYG{p}{,}\PYG{n}{MemberID} \PYG{n+nb}{INT} \PYG{k}{NOT} \PYG{k}{NULL} \PYG{k}{REFERENCES} \PYG{n}{USERS}\PYG{p}{(}\PYG{n}{USERID}\PYG{p}{)}\PYG{p}{,}\PYG{k}{Role} \PYG{n+nb}{VARCHAR}\PYG{p}{(}\PYG{l+m+mi}{1}\PYG{p}{)} \PYG{k}{NOT} \PYG{k}{NULL}\PYG{p}{,}\PYG{k}{PRIMARY} \PYG{k}{KEY}\PYG{p}{(}\PYG{n}{GROUPID}\PYG{p}{,} \PYG{n}{MEMBERID}\PYG{p}{)}

Python kısmında Job, Group ve Message sınıfları benim tarafımdan olusturuldu. Bu sınıfların kurucuları asagıdaverilmistir.

Sınıf kurucularında bulunan cp degiskeni database baglantısı saglanması için kullanılmaktadır. Bu sınıflardannesne olustururuken yapılacak islemin özelligine göre sınıfın degiskenleri kurucu methoda verilebilir ya da veril-meyebilir bu yüzden verilmesi veritabanı baglantısı için zorunlu olan cp degiskeni dısındaki degiskenlerin nesneolusturulurken verilmemesi ihtimaline karsı=None opsiyonu eklenerek bu degiskenler verilmediginde degerleriNone yapılmaktadır.

Job Sınıfı Kurucusu={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{\PYGZus{}\PYGZus{}init\PYGZus{}\PYGZus{}}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{cp}\PYG{p}{,} \PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb+bp}{None}\PYG{p}{,} \PYG{n}{companyId} \PYG{o}{=} \PYG{n+nb+bp}{None}\PYG{p}{,} \PYG{n}{position} \PYG{o}{=} \PYG{n+nb+bp}{None}\PYG{p}{,} \PYG{n}{salary} \PYG{o}{=} \PYG{n+nb+bp}{None}\PYG{p}{)}\PYG{p}{:}

\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp} \PYG{o}{=} \PYG{n}{cp}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{companyId} \PYG{o}{=} \PYG{n}{companyId}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{position} \PYG{o}{=} \PYG{n}{position}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{salary} \PYG{o}{=} \PYG{n}{salary}

Job Sınıfı Fonksiyonları={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{set\PYGZus{}id}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{:}

\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{id} \PYG{o}{=} \PYG{n+nb}{id}

\PYG{k}{def} \PYG{n+nf}{set\PYGZus{}companyId}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{companyId}\PYG{p}{)}\PYG{p}{:}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{companyId} \PYG{o}{=} \PYG{n}{companyId}

\PYG{k}{def} \PYG{n+nf}{set\PYGZus{}position}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{position}\PYG{p}{)}\PYG{p}{:}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{position} \PYG{o}{=} \PYG{n}{position}

\PYG{k}{def} \PYG{n+nf}{set\PYGZus{}salary}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{salary}\PYG{p}{)}\PYG{p}{:}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{salary} \PYG{o}{=} \PYG{n}{salary}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}job}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,}\PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{l+s+s2}{ SELECT T1.ID, COMPANIES.TITLE, T1.POSITION, T1.SALARY FROM (SELECT * FROM JOBS WHERE (ID=\PYGZob{}\PYGZcb{})) AS T1}\PYG{l+s+s2}{ INNER JOIN COMPANIES}\PYG{l+s+s2}{ ON COMPANIES.ID=T1.ID}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{)}

\PYG{n}{job\PYGZus{}list} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{job\PYGZus{}list}

2.2. Kod 65

Page 70: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}jobs}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{l+s+s2}{ SELECT T1.ID, COMPANIES.TITLE, T1.POSITION, T1.SALARY FROM (SELECT * FROM JOBS) AS T1}\PYG{l+s+s2}{ INNER JOIN COMPANIES}\PYG{l+s+s2}{ ON COMPANIES.ID=T1.ID}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{p}{)}

\PYG{n}{job\PYGZus{}list} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{job\PYGZus{}list}

\PYG{k}{def} \PYG{n+nf}{add\PYGZus{}job}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{k}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO JOBS(CompanyId, Position, Salary) VALUES}

\PYG{l+s+s2}{ ( \PYGZob{}\PYGZcb{}, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, \PYGZob{}\PYGZcb{} )}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{companyId}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{position}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{salary}\PYG{p}{)}\PYG{p}{)}

\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO JOBS(CompanyId, Position, Salary) VALUES}\PYG{l+s+s2}{ ( \PYGZob{}\PYGZcb{}, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, \PYGZob{}\PYGZcb{} )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{companyId}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{position}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{salary}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}

\PYG{k}{def} \PYG{n+nf}{delete\PYGZus{}jobs}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ids}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{DELETE FROM JOBS WHERE ID = \PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{k}{for} \PYG{n+nb}{id} \PYG{o+ow}{in} \PYG{n}{ids}\PYG{p}{:}

\PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{o}{.}\PYG{n}{split}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{maxsplit}\PYG{o}{=}\PYG{l+m+mi}{1}\PYG{p}{)}\PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{def} \PYG{n+nf}{update\PYGZus{}job}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{UPDATE JOBS}

\PYG{l+s+s2}{ SET CompanyId=\PYGZob{}\PYGZcb{}, Position=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ ,Salary=\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{ WHERE ID=\PYGZob{}\PYGZcb{};}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{companyId}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{position}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{salary}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{id}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}

Sırasıyla fonksiyonların özellikleri su sekilde özetlenebilir:

• set_id: id bilgisini belirler

• set_company: sirket bilgisini belirler

• set_position: pozisyon bilgisini belirler

• set_ salary: maas bilgisini belirler

• get_job: parametre olarak verilen id’ye sahip sirketin bilgilerini dönderir

• get_jobs: jobs tablosundaki bütün sirketlerin bilgilerini dönderir

• add_job: jobs tablosuna o nesnenin bilgilerini barındıran bir sirket ekler

• delete_jobs: parametre olarak verilen id’lere sahip sirketleri jobs tablosundan siler

• update_jobs: jobs tablosuna o nesnenin bilgilerini barındıran sirketi günceller

Group Sınıfı Kurucusu={}={}@default

66 Bölüm 2. Gelistirici Kılavuzu

Page 71: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{\PYGZus{}\PYGZus{}init\PYGZus{}\PYGZus{}}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{cp}\PYG{p}{,} \PYG{n}{name} \PYG{o}{=} \PYG{n+nb+bp}{None}\PYG{p}{,} \PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb+bp}{None}\PYG{p}{,} \PYG{n}{description}\PYG{o}{=}\PYG{n+nb+bp}{None}\PYG{p}{)}\PYG{p}{:}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp} \PYG{o}{=} \PYG{n}{cp}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{name} \PYG{o}{=} \PYG{n}{name}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{description} \PYG{o}{=} \PYG{n}{description}

Group Sınıfı Fonksiyonları={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{set\PYGZus{}id}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{:}

\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{id} \PYG{o}{=} \PYG{n+nb}{id}

\PYG{k}{def} \PYG{n+nf}{set\PYGZus{}name}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{name}\PYG{p}{)}\PYG{p}{:}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{name} \PYG{o}{=} \PYG{n}{name}

\PYG{k}{def} \PYG{n+nf}{set\PYGZus{}description}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{description}\PYG{p}{)}\PYG{p}{:}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{description} \PYG{o}{=} \PYG{n}{description}

\PYG{k}{def} \PYG{n+nf}{find\PYGZus{}group\PYGZus{}name}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT groupName FROM GROUPS WHERE ID = \PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{)}\PYG{n}{groupName} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchone}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{groupName}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}groups}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{if} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{id} \PYG{o+ow}{is} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM GROUPS}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{p}{)}\PYG{n}{group\PYGZus{}list} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{group\PYGZus{}list}

\PYG{k}{else}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM GROUPS WHERE ID = \PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{id}\PYG{p}{)}\PYG{p}{)}\PYG{n}{group\PYGZus{}list} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{group\PYGZus{}list}

\PYG{k}{def} \PYG{n+nf}{delete\PYGZus{}groups}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ids}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{DELETE FROM GROUPS WHERE ID = \PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{k}{for} \PYG{n+nb}{id} \PYG{o+ow}{in} \PYG{n}{ids}\PYG{p}{:}

\PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{o}{.}\PYG{n}{split}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{maxsplit}\PYG{o}{=}\PYG{l+m+mi}{1}\PYG{p}{)}\PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{def} \PYG{n+nf}{update\PYGZus{}group}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{UPDATE GROUPS}

\PYG{l+s+s2}{ SET GroupName=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, Description=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ WHERE ID=\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{name}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{description}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{id}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}

\PYG{k}{def} \PYG{n+nf}{create\PYGZus{}group}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO GROUPS(GroupName, Description) VALUES}

2.2. Kod 67

Page 72: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{l+s+s2}{ ( }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ );}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{name}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{description}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}

\PYG{k}{def} \PYG{n+nf}{add\PYGZus{}member}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{userid}\PYG{p}{,} \PYG{n}{role}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO MEMBERSHIP(GroupID, MemberId, role) VALUES}

\PYG{l+s+s2}{ ( }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ , }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{);}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{id}\PYG{p}{,} \PYG{n}{userid}\PYG{p}{,} \PYG{n}{role}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}

\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}members}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,}\PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{l+s+s2}{ SELECT T1.role, Users.firstname, Users.lastname, Users.uni, Users.UserID FROM (SELECT * FROM membership WHERE groupid=\PYGZob{}\PYGZcb{}) AS T1}\PYG{l+s+s2}{ INNER JOIN USERS}\PYG{l+s+s2}{ ON Users.UserID=T1.MemberId}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{users} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{users}

Sırasıyla fonksiyonların özellikleri su sekilde özetlenebilir:

• set_id: grup id bilgisini belirler

• set_name: grup ismi bilgisini belirler

• set_description: grup tanımı bilgisini belirler

• find_group_name: parametre olarak verilen id’ye sahip grubun ismini dönderir

• get_groups: Eger nesnenin id degeri None ise bütün grup bilgilerini, id degeri None degilse o idyesahip grubun bilgilerini dönderir

• delete_groups: parametre olarak verilen idlere ait grupları Groups tablosundan siler

• update_group: Groups tablosunda o nesnenin bilgilerini barındıran grubu günceller

• create_group: Groups tablosunda o nesnenin bilgilerini barındıran bir grup olusturur

• add_member: parametre olarak verilen userid ve role’ü barındıran bir üyeyi Membership tablosunaekler

• get_members: parametre olarak verilen idye sahip grubun üyelerinin bilgilerini Membership ve Usertablolarından katma islemiyle ulasarak dönderir.

Message Sınıfı Kurucusu={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{\PYGZus{}\PYGZus{}init\PYGZus{}\PYGZus{}}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{cp}\PYG{p}{,} \PYG{n}{senderId}\PYG{o}{=}\PYG{n+nb+bp}{None}\PYG{p}{,} \PYG{n}{receiverId}\PYG{o}{=}\PYG{n+nb+bp}{None}\PYG{p}{,} \PYG{n}{text}\PYG{o}{=}\PYG{n+nb+bp}{None}\PYG{p}{)}\PYG{p}{:}

\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp} \PYG{o}{=} \PYG{n}{cp}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{senderId} \PYG{o}{=} \PYG{n}{senderId}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{receiverId} \PYG{o}{=} \PYG{n}{receiverId}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{text} \PYG{o}{=} \PYG{n}{text}

Message Sınıfı Fonksiyonları={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{send}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

68 Bölüm 2. Gelistirici Kılavuzu

Page 73: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO MESSAGES(senderId, receiverId, text) VALUES}

\PYG{l+s+s2}{ ( }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{senderId}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{receiverId}\PYG{p}{,} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{text}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}

\PYG{k}{def} \PYG{n+nf}{delete\PYGZus{}messages}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ids}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{k}{with} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)} \PYG{k}{as} \PYG{n}{cursor}\PYG{p}{:}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{DELETE FROM MESSAGES WHERE ID = \PYGZob{}\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{k}{for} \PYG{n+nb}{id} \PYG{o+ow}{in} \PYG{n}{ids}\PYG{p}{:}

\PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{o}{.}\PYG{n}{split}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{maxsplit}\PYG{o}{=}\PYG{l+m+mi}{1}\PYG{p}{)}\PYG{n+nb}{id} \PYG{o}{=} \PYG{n+nb}{id}\PYG{p}{[}\PYG{l+m+mi}{}\PYG{p}{]}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n+nb}{id}\PYG{p}{)}\PYG{p}{)}

Sırasıyla fonksiyonların özellikleri su sekilde özetlenebilir:

• send: O mesaj nesnesine ait senderId, receiverId ve text degiskenlerini kullanarak Messages tablosunayeni bir mesaj ekler.

• delete_messages: parametre olarak verilen id’lere sahip mesajları Messages tablosundan siler.

2.2.5 Aydogdu Demirci Tarafından Gerçeklenen Islemler

Is Ortakları Tablosu

Is Ortakları varlıgı partners isimli tablo ile tanımlanmıstır. Bu tablo 4 kolondan olusmaktadır. Bu kolonlar isortagı ID’si, ismi, kurulus yılı ve ülkesini sırasıyla temsil eden PartnerId, PartnerName, FoundationYear ve Co-untry anahtarlarından olusmaktadır. Bunların arasından primary key olarak PartnerId belirlenmistir. Veritabanıislemleri sırasında hali hazırda zaten tablo olusturulmus ise hata almamak için DROP TABLE IF EXISTS partnersCASCADE sorgusu kullanılmıstır. Tablonun niteliklerinden olan PartnerId primary key olarak tanımlanmıstır. Part-nerName maksimum 40 uzunlugunda essiz bir katar olarak, FoundationYear bir tamsayı olarak ve Country ise yinemaksimum 40 uzunlugunda bir katar olarak tanımlanmıstır. Tablo init.py konumunda tanımlanmıs ve insert intokomutu ile 9 adet is ortagı kaydı baslangıç olarak tabloya eklenmistir.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{partners}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:} \PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DROP TABLE IF EXISTS partners CASCADE}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE partners (}\PYG{l+s+s2}{ PartnerId SERIAL PRIMARY KEY,}\PYG{l+s+s2}{ PartnerName VARCHAR(4 UNIQUE NOT NULL,}\PYG{l+s+s2}{ FoundationYear INT NOT NULL,}\PYG{l+s+s2}{ Country VARCHAR(4 NOT NULL}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO partners(PartnerName, FoundationYear, Country) VALUES}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Tesla}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 23, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{USA}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ ),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Vestel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 1984, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Turkey}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ ),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Gigafactory}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 24, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{USA}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ ),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{SpaceX}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 22, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{USA}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ ),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Foxconn}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 1974, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{China}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ ),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Panasonic}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 1918, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Japan}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ ),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Casper}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 1991, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Turkey}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{LG}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 1947, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Korea}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ ),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Airbus}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 197 }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{France}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{);}

2.2. Kod 69

Page 74: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}

Is Ortakları Class Yapısı

Is Ortakları varlıgının class yapısı partners.py konumunda tanımlanmıstır. Bu class yapısında listeleyen, kayıtekleyen, kayıt silen ve kayıt güncelleyen fonksiyonlar tanımlıdır.

Listeleme

get_partnerlist: Veritabanından tüm is ortagı kayıtlarını çekmek için bu fonksiyon tanımlanmıstır.Fonksiyon bu hali ile partners tablosundaki tüm kayıtları tüm bilgileri ile döndürmektedir. Farklı birmekanizma istenirse sorgu degistirilebilir.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}partnerlist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM partners}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

Silme

delete_partner: Veritabanından is ortagı kaydı silmek için bu fonksiyon tanımlanmıstır. ArayüzdeID’ler checkbox ile tanımlanmıs olup, isaretli checkboxlar ile silinmesi istenen kayıtların ID’leri bufonksiyona yönlendirilir ve delete komutuyla kayıtlar silinir.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{delete\PYGZus{}partner}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{PartnerId}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DELETE FROM partners WHERE PartnerId = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{PartnerId}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Ekleme

add_partner: Veritabanına yeni kayıt eklemek için bu fonksiyon tanımlanmıstır. Kaydı eklenmek is-tenen is ortagına ait isim, kurulus yılı ve ülkesi gibi bilgileri PartnerName, FoundationYear ve Countrydegiskenleri ile parametre olarak alır ve insert into komutu ile veritabanına yeni kayıt ekler.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{add\PYGZus{}partner}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{PartnerName}\PYG{p}{,} \PYG{n}{FoundationYear}\PYG{p}{,} \PYG{n}{Country}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO partners (PartnerName, FoundationYear, Country) VALUES (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{)}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{PartnerName}\PYG{p}{,} \PYG{n}{FoundationYear}\PYG{p}{,} \PYG{n}{Country}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

70 Bölüm 2. Gelistirici Kılavuzu

Page 75: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

Güncelleme

update_partner: Veritabanındaki bir kaydı güncellemek için bu fonksiyon tanımlanmıstır. Güncel-lenmek istenen kayda ait ID, isim, yıl ve ülke bilgilerini sırasıyla PartnerId, PartnerName, Founda-tionYear ve Country parametreleri ile alır ve update komutu ile ilgili ID’ye sahip olan kaydı bulupgünceller.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{update\PYGZus{}partner}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{PartnerId}\PYG{p}{,} \PYG{n}{PartnerName}\PYG{p}{,} \PYG{n}{FoundationYear}\PYG{p}{,} \PYG{n}{Country}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{UPDATE partners SET PartnerName = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, FoundationYear=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, Country=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ WHERE PartnerId=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{PartnerName}\PYG{p}{,} \PYG{n}{FoundationYear}\PYG{p}{,} \PYG{n}{Country}\PYG{p}{,} \PYG{n}{PartnerId}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Kullanılan Psycopg2 Metodları

cursor: Python kodunun PostgreSQL komutlarını çalıstırmasını saglar. execute: Veritabanının çalıs-masını saglar. commit: Bekleyen islemi veritabanına isler. fetchall: Sorgu sonuçlarının tüm satırlarınıgetirir.

2.2.6 Arayüz Islemleri ve Veritabanı Iliskisi

Is Ortakları arayüz Sayfasının Tanımlanması

Is Ortakları sayfasına sitenin sol üst kösesindeki kategoriler sekmesinden erisebilmek için, logged_in_layout.htmlkonumunda bir Bootstrap Glyphicon ile birlikte tıklandıgında ilgili sayfaya yönlendiren bir buton tanımlanmıstır.

={}={}@default=0=1=2=0=1=2\PYG{p}{\PYGZlt{}}\PYG{n+nt}{li}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{a} \PYG{n+na}{href}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}/partners\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{span} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}glyphicon glyphicon\PYGZhy{}signal\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{span}\PYG{p}{\PYGZgt{}} Is Ortakları\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{a}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{li}\PYG{p}{\PYGZgt{}}

Bu butona tıklandıgında gelen sayfa logged_in_layout.html sayfasına bir extension’dır.

={}={}@default=0=1=2=0=1=2\PYGZob{}\PYGZpc{} extends \PYGZdq{}logged\PYGZus{}in\PYGZus{}layout.html\PYGZdq{} \PYGZpc{}\PYGZcb{}\PYGZob{}\PYGZpc{} block title \PYGZpc{}\PYGZcb{} Is Ortakları\PYGZob{}\PYGZpc{}endblock\PYGZpc{}\PYGZcb{}\PYGZob{}\PYGZpc{} block content \PYGZpc{}\PYGZcb{}

Silme

Sayfa ilk açıldıgında her birine ait bir checkbox ile her bir Is Ortagı liste halinde gelir. Sayfada Bootstrap jum-botron, table ve buton stilleri kullanılmıstır. Sayfa yüklenirken veritabanına partners_page url’si ile baglanılırve veritabanından PartnerList istenir. Gelen bilgiler bootstrap stili bir tabloya ID degerleri bir checkbox olarakgözükecek sekilde form olarak hazırlanır. Bootstrap stili bir butona input görevi atanır ve arayüzde checkbox’ıisaretlenmis olan kayıtların ID’leri butona tıklandıgında sunucuya partners_to_delete istegiyle submit edilir. Yaniisaretli checkboxlara ait id’ler silinmesi talimatı ile birlikte submit edilir.

={}={}@default=0=1=2=0=1=2 \PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}page\PYGZhy{}header\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{h1}\PYG{p}{\PYGZgt{}}Is Ortakları\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{h1}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}Is ortaklarımız hakkındaki bilgilere bu sayfadan erisebilir ve bilgileri düzenleyebilirsiniz. \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

2.2. Kod 71

Page 76: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}container\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}Is Ortagı Silme\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}Kaydını silmek istediginiz Is Ortagı\PYGZsq{}nı isaretleyebilirsiniz.\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{form} \PYG{n+na}{action}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} url\PYGZus{}for(\PYGZsq{}partners\PYGZus{}page\PYGZsq{}) \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{n+na}{method}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}post\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{table} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}table\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{thead}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Sil\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Adı \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Kurulus Yılı \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Ülkesi \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{thead}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tbody}\PYG{p}{\PYGZgt{}}

\PYGZob{}\PYGZpc{} for PartnerId, PartnerName, FoundationYear, Country in PartnerList \PYGZpc{}\PYGZcb{}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}checkbox\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}partners\PYGZus{}to\PYGZus{}delete\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} PartnerId \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{p}{/}\PYG{p}{\PYGZgt{}} \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYGZob{}\PYGZob{} PartnerName \PYGZcb{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYGZob{}\PYGZob{} FoundationYear \PYGZcb{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYGZob{}\PYGZob{} Country \PYGZcb{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYGZob{}\PYGZpc{} endfor \PYGZpc{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tbody}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}submit\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}btn btn\PYGZhy{}primary btn\PYGZhy{}block\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Isaretli Is Ortagını Sil\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}delete\PYGZdq{}} \PYG{p}{/}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{form}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

Ekleme

Sayfada ikinci ana öge olarak kayıt ekleme arayüzü bulunur. Bu kısımda partners_page url’si ile sunucuya bag-lanılır eklenmek istenen is ortagının adı, kurulus yılı ve ülkesi bilgilerinin girilmesi istenen Bootstrap stili 3 adetform kutucugu ekrana verilir. Bootstrap stili bir butona partners_to_add istemiyle girilen verileri sunucuya aktar-ması islevi atanır.

={}={}@default=0=1=2=0=1=2\PYG{p}{\PYGZlt{}}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}Is Ortagı Ekleme\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}Yeni kayıt olusturmak için gerekli alanları doldurunuz.\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{form} \PYG{n+na}{action}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} url\PYGZus{}for(\PYGZsq{}partners\PYGZus{}page\PYGZsq{}) \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{n+na}{method}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}post\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{label} \PYG{n+na}{for}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}PartnerName\PYGZdq{}}\PYG{p}{\PYGZgt{}}Adı:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{label}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}PartnerName\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{label} \PYG{n+na}{for}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}FoundationYear\PYGZdq{}}\PYG{p}{\PYGZgt{}}Kurulus Yılı:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{label}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}FoundationYear\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{label} \PYG{n+na}{for}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Country\PYGZdq{}}\PYG{p}{\PYGZgt{}}Ülkesi:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{label}\PYG{p}{\PYGZgt{}}

72 Bölüm 2. Gelistirici Kılavuzu

Page 77: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Country\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}submit\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}btn btn\PYGZhy{}primary btn\PYGZhy{}block\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Is Ortagı Ekle\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}partners\PYGZus{}to\PYGZus{}add\PYGZdq{}} \PYG{p}{/}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{form}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

Güncelleme

Sayfada üçüncü ana öge olarak güncelleme arayüzü bulunur. Bu kısımda partners_page url’si ile sunucuya bagla-nılır ve veritabanından istenen PartnerList‘deki veriler bir for döngüsü ile Bootstrap stili form kutucuklarına yazılıolarak ekrana getirilir ve her bir satır sonuna Bootstrap stili bir buton eklenir. Kullanıcı, form kutucuklarına yazılıolarak getirilmis verilerde bir degisiklik yaptıgında o satıra ait güncelle butonuna tıklar ve form kutucuklarındakiveriler partners_to_update istemiyle sunucuya submit edilir.

={}={}@default=0=1=2=0=1=2\PYG{p}{\PYGZlt{}}\PYG{n+nt}{table} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}table\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{thead}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}ID\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Adı \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Kurulus Yılı \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Ülkesi \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Güncelle\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{thead}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tbody}\PYG{p}{\PYGZgt{}}

\PYGZob{}\PYGZpc{} for PartnerId, PartnerName, FoundationYear, Country in PartnerList \PYGZpc{}\PYGZcb{}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{form} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}inline\PYGZdq{}} \PYG{n+na}{action}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} url\PYGZus{}for(\PYGZsq{}partners\PYGZus{}page\PYGZsq{}) \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{n+na}{method}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}post\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{value }\PYG{o}{=} \PYG{l+s}{\PYGZob{}\PYGZob{}PartnerId\PYGZcb{}\PYGZcb{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}PartnerId\PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{n+na}{readonly} \PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{value }\PYG{o}{=} \PYG{l+s}{\PYGZob{}\PYGZob{}PartnerName\PYGZcb{}\PYGZcb{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}PartnerName\PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{value }\PYG{o}{=} \PYG{l+s}{\PYGZob{}\PYGZob{}FoundationYear\PYGZcb{}\PYGZcb{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}FoundationYear\PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{value }\PYG{o}{=} \PYG{l+s}{\PYGZob{}\PYGZob{}Country\PYGZcb{}\PYGZcb{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Country\PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}submit\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}btn btn\PYGZhy{}primary\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Güncelle\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}partners\PYGZus{}to\PYGZus{}update\PYGZdq{}} \PYG{p}{/}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{form}\PYG{p}{\PYGZgt{}}

\PYGZob{}\PYGZpc{} endfor \PYGZpc{}\PYGZcb{}

2.2. Kod 73

Page 78: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tbody}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}

Is Ortakları Sayfası Sunucu Baglantısı

server.py konumunda öncelikle Partners sınıfı için import islemi yapılmıstır.

={}={}@default=0=1=2=0=1=2\PYG{k+kn}{from} \PYG{n+nn}{partners} \PYG{k+kn}{import} \PYG{n}{Partners}

Sonrasında partners tablosu initialize edilmistir.

={}={}@default=0=1=2=0=1=2\PYG{n}{initialize}\PYG{o}{.}\PYG{n}{partners}\PYG{p}{(}\PYG{p}{)}

Arayüz sayfasından gelecek olan get_partnerlist, partners_to_delete, partners_to_add ve partners_to_update is-temlerini isleyip ilgili Partners sınıfı fonsiyonunu yürütücek kodlar yazılmıstır. Her bir istem islendikten sonraarayüzde güncel verilerin gözükmesi için partners.html gönderilerek arayüz sayfasının yenilenmesi saglanmıstır.

={}={}@default=0=1=2=0=1=2\PYG{n+nd}{@app.route}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/partners}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{methods}\PYG{o}{=}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{def} \PYG{n+nf}{partners\PYGZus{}page}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:}

\PYG{n}{prtnrs} \PYG{o}{=} \PYG{n}{Partners}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{fn} \PYG{o}{=} \PYG{n}{Func}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}

\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{n}{plist} \PYG{o}{=} \PYG{n}{prtnrs}\PYG{o}{.}\PYG{n}{get\PYGZus{}partnerlist}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{partners.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{PartnerList} \PYG{o}{=} \PYG{n}{plist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{partners\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{partnerids} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{o}{.}\PYG{n}{getlist}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{partners\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{k}{for} \PYG{n}{PartnerId} \PYG{o+ow}{in} \PYG{n}{partnerids}\PYG{p}{:}

\PYG{n}{prtnrs}\PYG{o}{.}\PYG{n}{delete\PYGZus{}partner}\PYG{p}{(}\PYG{n}{PartnerId}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{partners\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{partners\PYGZus{}to\PYGZus{}add}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{prtnrs}\PYG{o}{.}\PYG{n}{add\PYGZus{}partner}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{PartnerName}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{FoundationYear}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Country}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}

\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{partners\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{partners\PYGZus{}to\PYGZus{}update}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{prtnrs}\PYG{o}{.}\PYG{n}{update\PYGZus{}partner}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{PartnerId}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{PartnerName}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{FoundationYear}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Country}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{partners\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

Projeler Tablosu

Projeler varlıgı projects isimli tablo ile tanımlanmıstır. Bu tablo 4 kolondan olusmaktadır. Bu kolonlar projeID’sini, ismini, tamamlanma yılını ve gerçeklestiren sirketi sırasıyla temsil eden ProjectId, ProjectName, Pro-jectYear ve ProjectPartner anahtarlarından olusmaktadır. Bunların arasından primary key olarak ProjectId belir-lenmistir. Veritabanı islemleri sırasında hali hazırda zaten tablo olusturulmus ise hata almamak için DROP TABLEIF EXISTS projects CASCADE sorgusu kullanılmıstır. Tablonun niteliklerinden olan ProjectId primary key olaraktanımlanmıstır. ProjectName maksimum 40 uzunlugunda essiz bir katar olarak, ProjectYear bir tamsayı olarak

74 Bölüm 2. Gelistirici Kılavuzu

Page 79: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

ve ProjectPartner ise yine maksimum 40 uzunlugunda bir katar olarak tanımlanmıstır. Tablo init.py konumundatanımlanmıs ve insert into komutu ile 9 adet proje kaydı baslangıç olarak tabloya eklenmistir.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{projects}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:} \PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DROP TABLE IF EXISTS projects CASCADE}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE projects (}\PYG{l+s+s2}{ ProjectId SERIAL PRIMARY KEY,}\PYG{l+s+s2}{ ProjectName VARCHAR(4 UNIQUE NOT NULL,}\PYG{l+s+s2}{ ProjectYear INT NOT NULL,}\PYG{l+s+s2}{ ProjectPartner VARCHAR(4 NOT NULL}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}

\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO projects(ProjectName, ProjectYear, ProjectPartner) VALUES}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ModelS}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 22, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Tesla}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Venus}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 24, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Vestel}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Solarcity}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 25, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Gigafactory}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Dragon}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 22, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{SpaceX}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{NanoPC}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 23, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Foxconn}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Panahome}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 1999, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Panasonic}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Via}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 23, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Casper}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Giir}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 1986, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{LG}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{A38}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, 27, }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Airbus}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{);}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}

Projeler Class Yapısı

Projeler varlıgının class yapısı projects.py konumunda tanımlanmıstır. Bu class yapısında listeleyen, kayıt ekleyen,kayıt silen ve kayıt güncelleyen fonksiyonlar tanımlıdır.

Listeleme

get_projectlist: Veritabanından tüm proje kayıtlarını çekmek için bu fonksiyon tanımlanmıstır. Fonk-siyon bu hali ile projects tablosundaki tüm kayıtları tüm bilgileri ile döndürmektedir. Farklı bir me-kanizma istenirse sorgu degistirilebilir.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{get\PYGZus{}projectlist}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SELECT * FROM projects}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{rows} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{rows}

Silme

delete_project: Veritabanından proje kaydı silmek için bu fonksiyon tanımlanmıstır. Arayüzde ID’lercheckbox ile tanımlanmıs olup, isaretli checkboxlar ile silinmesi istenen kayıtların ID’leri bu fonksi-yona yönlendirilir ve delete komutuyla kayıtlar silinir.

2.2. Kod 75

Page 80: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{delete\PYGZus{}project}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ProjelerId}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DELETE FROM projects WHERE ProjectId = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{ProjectId}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Ekleme

add_project: Veritabanına yeni kayıt eklemek için bu fonksiyon tanımlanmıstır. Kaydı eklenmekistenen projeye ait isim, tamamlanma yılı ve gerçeklestiren sirket gibi bilgileri ProjectName, Project-Year ve ProjectPartner degiskenleri ile parametre olarak alır ve insert into komutu ile veritabanınayeni kayıt ekler.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{add\PYGZus{}project}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ProjectName}\PYG{p}{,} \PYG{n}{ProjectYear}\PYG{p}{,} \PYG{n}{ProjectPartner}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO projects (ProjectName, ProjectYear, ProjectPartner) VALUES (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{)}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{ProjectName}\PYG{p}{,} \PYG{n}{ProjectYear}\PYG{p}{,} \PYG{n}{ProjectPartner}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Güncelleme

update_project: Veritabanındaki bir kaydı güncellemek için bu fonksiyon tanımlanmıstır. Güncellen-mek istenen kayda ait ID, isim, yıl ve sirket bilgilerini sırasıyla ProjectId, ProjectName, ProjectYearve ProjectPartner parametreleri ile alır ve update komutu ile ilgili ID’ye sahip olan kaydı bulup gün-celler.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{update\PYGZus{}project}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ProjectId}\PYG{p}{,} \PYG{n}{ProjectName}\PYG{p}{,} \PYG{n}{ProjectYear}\PYG{p}{,} \PYG{n}{ProjectPartner}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{UPDATE projects SET ProjectName = }\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, ProjectYear=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{, ProjectPartner=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ WHERE ProjectId=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{ProjectName}\PYG{p}{,} \PYG{n}{ProjectYear}\PYG{p}{,} \PYG{n}{ProjectPartner}\PYG{p}{,} \PYG{n}{ProjectId}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return}

Kullanılan Psycopg2 Metodları

cursor: Python kodunun PostgreSQL komutlarını çalıstırmasını saglar. execute: Veritabanının çalıs-masını saglar. commit: Bekleyen islemi veritabanına isler. fetchall: Sorgu sonuçlarının tüm satırlarınıgetirir.

2.2.7 Arayüz Islemleri ve Veritabanı Iliskisi

Projeler arayüz Sayfasının Tanımlanması

Projeler sayfasına sitenin sol üst kösesindeki kategoriler sekmesinden erisebilmek için, logged_in_layout.htmlkonumunda bir Bootstrap Glyphicon ile birlikte tıklandıgında ilgili sayfaya yönlendiren bir buton tanımlanmıstır.

76 Bölüm 2. Gelistirici Kılavuzu

Page 81: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

={}={}@default=0=1=2=0=1=2\PYG{p}{\PYGZlt{}}\PYG{n+nt}{li}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{a} \PYG{n+na}{href}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}/projects\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{span} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}glyphicon glyphicon\PYGZhy{}qrcode\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{span}\PYG{p}{\PYGZgt{}} Projeler\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{a}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{li}\PYG{p}{\PYGZgt{}}

Bu butona tıklandıgında gelen sayfa logged_in_layout.html sayfasına bir extension’dır.

={}={}@default=0=1=2=0=1=2\PYGZob{}\PYGZpc{} extends \PYGZdq{}logged\PYGZus{}in\PYGZus{}layout.html\PYGZdq{} \PYGZpc{}\PYGZcb{}\PYGZob{}\PYGZpc{} block title \PYGZpc{}\PYGZcb{} Projeler\PYGZob{}\PYGZpc{}endblock\PYGZpc{}\PYGZcb{}\PYGZob{}\PYGZpc{} block content \PYGZpc{}\PYGZcb{}

Silme

Sayfa ilk açıldıgında her birine ait bir checkbox ile her bir Proje liste halinde gelir. Sayfada Bootstrap jumbotron,table ve buton stilleri kullanılmıstır. Sayfa yüklenirken veritabanına projects_page url’si ile baglanılır ve verita-banından ProjectList istenir. Gelen bilgiler bootstrap stili bir tabloya ID degerleri bir checkbox olarak gözükeceksekilde form olarak hazırlanır. Bootstrap stili bir butona input görevi atanır ve arayüzde checkbox’ı isaretlenmisolan kayıtların ID’leri butona tıklandıgında sunucuya projects_to_delete istegiyle submit edilir. Isaretli checkbo-xlara ait id’ler silinmesi talimatı ile birlikte submit edilir.

={}={}@default=0=1=2=0=1=2 \PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}page\PYGZhy{}header\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{h1}\PYG{p}{\PYGZgt{}}Projeler\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{h1}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}Projeler hakkındaki bilgilere bu sayfadan erisebilir ve bilgileri düzenleyebilirsiniz. \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}container\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}Proje Silme\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}Kaydını silmek istediginiz Projeyi isaretleyebilirsiniz.\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{form} \PYG{n+na}{action}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} url\PYGZus{}for(\PYGZsq{}projects\PYGZus{}page\PYGZsq{}) \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{n+na}{method}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}post\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{table} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}table\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{thead}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Sil\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Adı \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Tamamlanma Yılı \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Gerçeklestiren Is Ortagı \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{thead}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tbody}\PYG{p}{\PYGZgt{}}

\PYGZob{}\PYGZpc{} for ProjectId, ProjectName, ProjectYear, ProjectPartner in ProjectList \PYGZpc{}\PYGZcb{}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}checkbox\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}projects\PYGZus{}to\PYGZus{}delete\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} ProjectId \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{p}{/}\PYG{p}{\PYGZgt{}} \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYGZob{}\PYGZob{} ProjectName \PYGZcb{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYGZob{}\PYGZob{} ProjectYear \PYGZcb{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYGZob{}\PYGZob{} ProjectPartner \PYGZcb{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYGZob{}\PYGZpc{} endfor \PYGZpc{}\PYGZcb{}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tbody}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}submit\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}btn btn\PYGZhy{}primary btn\PYGZhy{}block\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Isaretli Projeyi Sil\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}delete\PYGZdq{}} \PYG{p}{/}\PYG{p}{\PYGZgt{}}

2.2. Kod 77

Page 82: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{form}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

Ekleme

Sayfada ikinci ana öge olarak kayıt ekleme arayüzü bulunur. Bu kısımda projects_page url’si ile sunucuya baglanı-lır eklenmek istenen projenin adı, tamamlanma yılı ve gerçeklestiren sirket bilgilerini girilmesi istenen Bootstrapstili 3 adet form kutucugu ekrana verilir. Bootstrap stili bir butona projects_to_add istemiyle girilen verileri sunu-cuya aktarması islevi atanır.

={}={}@default=0=1=2=0=1=2\PYG{p}{\PYGZlt{}}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}Proje Ekleme\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{h2}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}Yeni kayıt olusturmak için gerekli alanları doldurunuz.\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{p}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{form} \PYG{n+na}{action}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} url\PYGZus{}for(\PYGZsq{}projects\PYGZus{}page\PYGZsq{}) \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{n+na}{method}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}post\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{label} \PYG{n+na}{for}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}ProjectName\PYGZdq{}}\PYG{p}{\PYGZgt{}}Adı:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{label}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}ProjectName\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{label} \PYG{n+na}{for}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}ProjectYear\PYGZdq{}}\PYG{p}{\PYGZgt{}}Tamamlanma Yılı:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{label}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}ProjectYear\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{label} \PYG{n+na}{for}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}ProjectPartner\PYGZdq{}}\PYG{p}{\PYGZgt{}}Gerçeklestiren Is Ortagı:\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{label}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}ProjectPartner\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}submit\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}btn btn\PYGZhy{}primary btn\PYGZhy{}block\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Proje Ekle\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}projects\PYGZus{}to\PYGZus{}add\PYGZdq{}} \PYG{p}{/}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{form}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}

Güncelleme

Sayfada üçüncü ana öge olarak güncelleme arayüzü bulunur. Bu kısımda projects_page url’si ile sunucuya bagla-nılır ve veritabanından istenen ProjectList‘deki veriler bir for döngüsü ile Bootstrap stili form kutucuklarına yazılıolarak ekrana getirilir ve her bir satır sonuna Bootstrap stili bir buton eklenir. Kullanıcı, form kutucuklarına yazılıolarak getirilmis verilerde bir degisiklik yaptıgında o satıra ait güncelle butonuna tıklar ve form kutucuklarındakiveriler projects_to_update istemiyle sunucuya submit edilir.

={}={}@default=0=1=2=0=1=2\PYG{p}{\PYGZlt{}}\PYG{n+nt}{table} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}table\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{thead}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}ID\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Adı \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Tamamlanma Yılı \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Gerçeklestiren Is Ortagı \PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}Güncelle\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{thead}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tbody}\PYG{p}{\PYGZgt{}}

78 Bölüm 2. Gelistirici Kılavuzu

Page 83: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYGZob{}\PYGZpc{} for ProjectId, ProjectName, ProjectYear, ProjectPartner in ProjectList \PYGZpc{}\PYGZcb{}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{form} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}inline\PYGZdq{}} \PYG{n+na}{action}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}\PYGZob{}\PYGZob{} url\PYGZus{}for(\PYGZsq{}projects\PYGZus{}page\PYGZsq{}) \PYGZcb{}\PYGZcb{}\PYGZdq{}} \PYG{n+na}{method}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}post\PYGZdq{}}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{value }\PYG{o}{=} \PYG{l+s}{\PYGZob{}\PYGZob{}ProjectId\PYGZcb{}\PYGZcb{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}ProjectId\PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{n+na}{readonly} \PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{td}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{value }\PYG{o}{=} \PYG{l+s}{\PYGZob{}\PYGZob{}ProjectName\PYGZcb{}\PYGZcb{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}ProjectName\PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{value }\PYG{o}{=} \PYG{l+s}{\PYGZob{}\PYGZob{}ProjectYear\PYGZcb{}\PYGZcb{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}ProjectYear\PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{div} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}group\PYGZdq{}}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}text\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}form\PYGZhy{}control\PYGZdq{}} \PYG{n+na}{value }\PYG{o}{=} \PYG{l+s}{\PYGZob{}\PYGZob{}ProjectPartner\PYGZcb{}\PYGZcb{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}ProjectPartner\PYGZdq{}} \PYG{n+na}{required} \PYG{n+na}{autofocus} \PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{div}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{n+nt}{input} \PYG{n+na}{type}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}submit\PYGZdq{}} \PYG{n+na}{class}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}btn btn\PYGZhy{}primary\PYGZdq{}} \PYG{n+na}{value}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}Güncelle\PYGZdq{}} \PYG{n+na}{name}\PYG{o}{=}\PYG{l+s}{\PYGZdq{}projects\PYGZus{}to\PYGZus{}update\PYGZdq{}} \PYG{p}{/}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{th}\PYG{p}{\PYGZgt{}}\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tr}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{form}\PYG{p}{\PYGZgt{}}

\PYGZob{}\PYGZpc{} endfor \PYGZpc{}\PYGZcb{}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{tbody}\PYG{p}{\PYGZgt{}}

\PYG{p}{\PYGZlt{}}\PYG{p}{/}\PYG{n+nt}{table}\PYG{p}{\PYGZgt{}}

Projeler Sayfası Sunucu Baglantısı

server.py konumunda öncelikle Projects sınıfı için import islemi yapılmıstır.

={}={}@default=0=1=2=0=1=2\PYG{k+kn}{from} \PYG{n+nn}{projects} \PYG{k+kn}{import} \PYG{n}{Projects}

Sonrasında projects tablosu initialize edilmistir.

={}={}@default=0=1=2=0=1=2\PYG{n}{initialize}\PYG{o}{.}\PYG{n}{projects}\PYG{p}{(}\PYG{p}{)}

Arayüz sayfasından gelecek olan get_projectlist, projects_to_delete, projects_to_add ve projects_to_update istem-lerini isleyip ilgili Project sınıfı fonsiyonunu yürütücek kodlar yazılmıstır. Her bir istem islendikten sonra arayüzdegüncel verilerin gözükmesi için projects.html gönderilerek arayüz sayfasının yenilenmesi saglanmıstır.

={}={}@default=0=1=2=0=1=2\PYG{n+nd}{@app.route}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/projects}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{methods}\PYG{o}{=}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{def} \PYG{n+nf}{projects\PYGZus{}page}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:}

\PYG{n}{prjcts} \PYG{o}{=} \PYG{n}{Projects}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{fn} \PYG{o}{=} \PYG{n}{Func}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}

\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}

2.2. Kod 79

Page 84: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{n}{prlist} \PYG{o}{=} \PYG{n}{prjcts}\PYG{o}{.}\PYG{n}{get\PYGZus{}projectlist}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{projects.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{ProjectList} \PYG{o}{=} \PYG{n}{prlist}\PYG{p}{,} \PYG{n}{current\PYGZus{}time} \PYG{o}{=} \PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{projects\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{projectids} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{o}{.}\PYG{n}{getlist}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{projects\PYGZus{}to\PYGZus{}delete}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{k}{for} \PYG{n}{ProjectId} \PYG{o+ow}{in} \PYG{n}{projectids}\PYG{p}{:}

\PYG{n}{prjcts}\PYG{o}{.}\PYG{n}{delete\PYGZus{}project}\PYG{p}{(}\PYG{n}{ProjectId}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{projects\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{projects\PYGZus{}to\PYGZus{}add}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{prjcts}\PYG{o}{.}\PYG{n}{add\PYGZus{}project}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ProjectName}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ProjectYear}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ProjectPartner}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{projects\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{elif} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{projects\PYGZus{}to\PYGZus{}update}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{:}\PYG{n}{prjcts}\PYG{o}{.}\PYG{n}{update\PYGZus{}project}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ProjectId}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ProjectName}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ProjectYear}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ProjectPartner}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{projects\PYGZus{}page}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

2.2.8 Sevket Cerit Tarafından Yapılan Kısımlar

Kullanıcılar Tablosu

Kullanıcıları temsil etmek icin “users” tablosu olusturuldu.Users tablosu “userId” birincil anahtar ve serial olaraktanımlandı. “Firstname” kullanıcının ismi ,”Lastname” kullanıcının soyismi ,”Email_adress” kullanıcının mailadresi ,”password” kullanıcının siteye giris yapmak için kullanacagı sifresi ve universities tablosuna dıs anahtarolan “uni” niteliklerine sahiptir.

={}={}@default=0=1=2=0=1=2\PYG{k}{def} \PYG{n+nf}{users}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{)}\PYG{p}{:} \PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{cp}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{DROP TABLE IF EXISTS users CASCADE}\PYG{l+s+s2}{\PYGZdq{}}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{CREATE TABLE users (}

\PYG{l+s+s2}{ uni VARCHAR (1) NOT NULL REFERENCES universities(title)}\PYG{l+s+s2}{ ON DELETE CASCADE}\PYG{l+s+s2}{ ON UPDATE CASCADE,}\PYG{l+s+s2}{ UserId SERIAL PRIMARY KEY,}\PYG{l+s+s2}{ Firstname VARCHAR (8 NOT NULL,}\PYG{l+s+s2}{ Lastname VARCHAR (8 NOT NULL ,}\PYG{l+s+s2}{ Email\PYGZus{}adress VARCHAR (1) NOT NULL UNIQUE,}\PYG{l+s+s2}{ password VARCHAR(1 NOT NULL}\PYG{l+s+s2}{ )}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{INSERT INTO users(Firstname, Lastname, Email\PYGZus{}adress,uni,password) VALUES}

\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Sevket}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Cerit}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{[email protected]}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Ankara Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{sevko}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Mert}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Yıldız}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{[email protected]}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Istanbul Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{mert}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Halit}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Ugurgelen}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{[email protected]}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bogaziçi Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{halit}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Hasan}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Caglar}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{[email protected]}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Istanbul Teknik Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{hhc}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Donald}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Hearn}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{[email protected]}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bogaziçi Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{hearn}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Ulug}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Bayazit}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{[email protected]}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Istanbul Teknik Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ulug}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{),}\PYG{l+s+s2}{ (}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Fatih}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Guler}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{gulerfa}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{Istanbul Teknik Üniversitesi}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{feg}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{);}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}

Kullanıcı Girisi

Kullanıcıların sayfaya girisi için mail adresleri ve sifreleri veritabanında kontrol edildi.Eslesme saglanırsa siteninanasayfasına yönlendirildi.

80 Bölüm 2. Gelistirici Kılavuzu

Page 85: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

={}={}@default=0=1=2=0=1=2\PYG{n+nd}{@app.route}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/home}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{methods} \PYG{o}{=} \PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{def} \PYG{n+nf}{page\PYGZus{}login}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:}\PYG{k}{with} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)} \PYG{k}{as} \PYG{n}{connection}\PYG{p}{:}

\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}

\PYG{n}{mailentered} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{mail}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{n}{passentered} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{password}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT Firstname,Lastname,Email\PYGZus{}adress FROM users WHERE Email\PYGZus{}adress=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ AND password=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ }\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{mailentered}\PYG{p}{,} \PYG{n}{passentered}\PYG{p}{)}\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)}\PYG{k}{global} \PYG{n}{allusers}\PYG{n}{allusers} \PYG{o}{=} \PYG{n}{cursor}\PYG{o}{.}\PYG{n}{fetchall}\PYG{p}{(}\PYG{p}{)}\PYG{n}{x} \PYG{o}{=} \PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{allusers}\PYG{p}{)}\PYG{k}{if} \PYG{n}{x} \PYG{o}{==} \PYG{l+m+mi}{1}\PYG{p}{:}

\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{home.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{k}{else}\PYG{p}{:}

\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{signup.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{k}{elif} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}

\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{signup.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}

Kullanıcı Kayıt

Siteye kayıt olmak isteyen kullanıcılar email,ad,soyad,üniversite ve sifre formlarını doldurarak kayıt olur.Girilenbilgiler veritabanına kaydedilir.Kayıt isleminden sonra giris sayfasına yönlendirilir.

={}={}@default=0=1=2=0=1=2\PYG{n+nd}{@app.route}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/user\PYGZus{}add}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{methods}\PYG{o}{=}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{def} \PYG{n+nf}{user\PYGZus{}add}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:}\PYG{n}{user} \PYG{o}{=} \PYG{n}{users}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}

\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{signup.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time}\PYG{o}{=}\PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}\PYG{n}{user}\PYG{o}{.}\PYG{n}{set\PYGZus{}mail}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{email}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{user}\PYG{o}{.}\PYG{n}{set\PYGZus{}name}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{firstname}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{user}\PYG{o}{.}\PYG{n}{set\PYGZus{}lastname}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{lastname}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{user}\PYG{o}{.}\PYG{n}{set\PYGZus{}uni}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{uni}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{user}\PYG{o}{.}\PYG{n}{set\PYGZus{}password}\PYG{p}{(}\PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{password}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{user}\PYG{o}{.}\PYG{n}{add\PYGZus{}user}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{page\PYGZus{}login}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

Kullanıcı Profil

Kullanıcı profil sayfasında bilgilerini güncelleyebilir.Formda yer alan mail bilgisi veritabanında kontrol edilir veeslesen kullanıcının yeni girilen bilgileri veritabanına kaydedilir.

={}={}@default=0=1=2=0=1=2\PYG{n+nd}{@app.route}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{/user\PYGZus{}update}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{methods}\PYG{o}{=}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{def} \PYG{n+nf}{user\PYGZus{}update}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:}\PYG{n}{user} \PYG{o}{=} \PYG{n}{users}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{GET}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}

\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{render\PYGZus{}template}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{signup.html}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{current\PYGZus{}time}\PYG{o}{=}\PYG{n}{now}\PYG{o}{.}\PYG{n}{ctime}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)}

\PYG{k}{if} \PYG{n}{request}\PYG{o}{.}\PYG{n}{method} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{POST}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}\PYG{n}{name} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{firstname}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{n}{mail} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{email}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}

2.2. Kod 81

Page 86: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{n}{uni} \PYG{o}{=} \PYG{n}{request}\PYG{o}{.}\PYG{n}{form}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{uni}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{n}{connection} \PYG{o}{=} \PYG{n}{dbapi2}\PYG{o}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)}\PYG{n}{cursor} \PYG{o}{=} \PYG{n}{connection}\PYG{o}{.}\PYG{n}{cursor}\PYG{p}{(}\PYG{p}{)}\PYG{n}{statement} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{UPDATE users}

\PYG{l+s+s2}{ SET Firstname=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{,uni=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ WHERE Email\PYGZus{}adress=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}s}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} \PYG{o}{\PYGZpc{}} \PYG{p}{(}\PYG{n}{name}\PYG{p}{,} \PYG{n}{uni}\PYG{p}{,} \PYG{n}{mail}\PYG{p}{)}

\PYG{n}{cursor}\PYG{o}{.}\PYG{n}{execute}\PYG{p}{(}\PYG{n}{statement}\PYG{p}{)}\PYG{n}{connection}\PYG{o}{.}\PYG{n}{commit}\PYG{p}{(}\PYG{p}{)}\PYG{n}{now} \PYG{o}{=} \PYG{n}{datetime}\PYG{o}{.}\PYG{n}{datetime}\PYG{o}{.}\PYG{n}{now}\PYG{p}{(}\PYG{p}{)}\PYG{k}{return} \PYG{n}{redirect}\PYG{p}{(}\PYG{n}{url\PYGZus{}for}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{page\PYGZus{}profile}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)}

82 Bölüm 2. Gelistirici Kılavuzu

Page 87: itucsdb1605 IsteSen Proje Raporu - Read the Docs

BÖLÜM 3

Kurulum Kılavuzu

Projeyi dogru sekilde çalıstırabilmek için asagıda belirtilen paketler ve programlar yüklenmelidir.

Python 3.4.3

Python bu linkten yüklenebilir: https://www.python.org/downloads/release/python-343/Don

Flask Framework

Flask bu linkten yüklenebilir: http://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz

YADA pip aracılıgıyla yüklenebilir.

={}={}@default=0=1=2=0=1=2\PYG{n}{pip} \PYG{n}{install} \PYG{n}{Flask}

Psycopg2

Psycopg2 bu linkten yüklenebilir: http://www.stickpeople.com/projects/python/win-psycopg/

YADA pip aracılıgıyla yüklenebilir.

={}={}@default=0=1=2=0=1=2\PYG{n}{pip} \PYG{n}{install} \PYG{n}{psycopg2}

PostgreSQL

PostgreSQL bu linkten yüklenebilir: http://www.postgresql.org/download/

={}={}@default=0=1=2=0=1=2\PYG{k}{if} \PYG{n}{\PYGZus{}\PYGZus{}name\PYGZus{}\PYGZus{}} \PYG{o}{==} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZus{}\PYGZus{}main\PYGZus{}\PYGZus{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{:}

\PYG{n}{app}\PYG{o}{.}\PYG{n}{secret\PYGZus{}key} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+se}{\PYGZbs{}xd1}\PYG{l+s+s1}{M\PYGZlt{}n)}\PYG{l+s+se}{\PYGZbs{}xf1}\PYG{l+s+se}{\PYGZbs{}xf9}\PYG{l+s+se}{\PYGZbs{}x}\PYG{l+s+se}{\PYGZbs{}xe2}\PYG{l+s+s1}{z}\PYG{l+s+se}{\PYGZbs{}x8a}\PYG{l+s+s1}{i}\PYG{l+s+se}{\PYGZbs{}x99}\PYG{l+s+se}{\PYGZbs{}xf8}\PYG{l+s+se}{\PYGZbs{}xb8}\PYG{l+s+se}{\PYGZbs{}xf}\PYG{l+s+se}{\PYGZbs{}xe9}\PYG{l+s+se}{\PYGZbs{}x}\PYG{l+s+se}{\PYGZbs{}x95}\PYG{l+s+s1}{\PYGZdq{}}\PYG{l+s+s1}{}\PYG{l+s+se}{\PYGZbs{}x9d}\PYG{l+s+se}{\PYGZbs{}xd2}\PYG{l+s+se}{\PYGZbs{}xf9}\PYG{l+s+s1}{\PYGZsq{}}\PYG{n}{VCAP\PYGZus{}APP\PYGZus{}PORT} \PYG{o}{=} \PYG{n}{os}\PYG{o}{.}\PYG{n}{getenv}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{VCAP\PYGZus{}APP\PYGZus{}PORT}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{k}{if} \PYG{n}{VCAP\PYGZus{}APP\PYGZus{}PORT} \PYG{o+ow}{is} \PYG{o+ow}{not} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{n}{port}\PYG{p}{,} \PYG{n}{debug} \PYG{o}{=} \PYG{n+nb}{int}\PYG{p}{(}\PYG{n}{VCAP\PYGZus{}APP\PYGZus{}PORT}\PYG{p}{)}\PYG{p}{,} \PYG{n+nb+bp}{False}\PYG{k}{else}\PYG{p}{:}

\PYG{n}{port}\PYG{p}{,} \PYG{n}{debug} \PYG{o}{=} \PYG{l+m+mi}{5}\PYG{p}{,} \PYG{n+nb+bp}{True}

\PYG{n}{VCAP\PYGZus{}SERVICES} \PYG{o}{=} \PYG{n}{os}\PYG{o}{.}\PYG{n}{getenv}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{VCAP\PYGZus{}SERVICES}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{k}{if} \PYG{n}{VCAP\PYGZus{}SERVICES} \PYG{o+ow}{is} \PYG{o+ow}{not} \PYG{n+nb+bp}{None}\PYG{p}{:}

\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{get\PYGZus{}sqldb\PYGZus{}dsn}\PYG{p}{(}\PYG{n}{VCAP\PYGZus{}SERVICES}\PYG{p}{)}\PYG{k}{else}\PYG{p}{:}

\PYG{n}{app}\PYG{o}{.}\PYG{n}{config}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dsn}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{dbname=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{your\PYGZus{}choice}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ host=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{localhost}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ port=your\PYGZus{}choice user=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{your\PYGZus{}choice}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{ password=}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{your\PYGZus{}choice}\PYG{l+s+s2}{\PYGZsq{}}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}

\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{static/personphotos/}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{:}\PYG{n}{os}\PYG{o}{.}\PYG{n}{makedirs}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{static/personphotos/}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}

83

Page 88: itucsdb1605 IsteSen Proje Raporu - Read the Docs

itucsdb1605 IsteSen Proje Raporu, Sürüm 1.0

\PYG{n}{app}\PYG{o}{.}\PYG{n}{run}\PYG{p}{(}\PYG{n}{host}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{˙˙}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{port}\PYG{o}{=}\PYG{n}{port}\PYG{p}{,} \PYG{n}{debug}\PYG{o}{=}\PYG{n}{debug}\PYG{p}{)}

server.py Çalıstırma

Komut satırında projenin yoluna gidilerek asagıdaki komut çalıstırılır.

={}={}@default=0=1=2=0=1=2\PYG{n}{python} \PYG{n}{server}\PYG{o}{.}\PYG{n}{py}

84 Bölüm 3. Kurulum Kılavuzu