Csv2Arff

Bir süredir üniversite çatısı altında ağı izleyip makine öğrenmesi yöntemleri kullanarak saldırıları tespit etmeyi hedefleyen bir proje üzerinde çalışıyorum ve şu an proje kapsamında ihtiyaç duyduğum ve haftasonu hazırladığım ufak bir dönüştürücüyü paylaşmak istiyorum.

Elbette makine öğrenmesi yöntemleri deyince akla ilk gelen program Weka (bkz) dosya formatı ise arff(bkz) oluyor. Ancak biz projeye başladığımızda tüm verilerimizi CSV(bkz) formatında saklamıştık. Bu verileri Weka’ya aktarmak istediğimizde Weka’nın kendi dönüştürücüsü işimizi görüyordu. Ancak tüm yaptıklarımızı bir paket haline getirmek istediğimizde komut satırı üzerinde çalışan bir dönüştürücüye ihtiyaç duyduk. Dolayısıyla Weka’nın arayüz üzerindeki çalışma prensibini takip edip kendi dönüştürücümü python kullanarak hazırladım. Konuyla ilgilenen arkadaşların ihtiyacı olursa buradan ulaşabilirler.

Django projenizi VPS üzerine deploy edin!

Django’nun en güzel özelliklerinden biri şüphesiz development servera sahip olması. Şahsen iş yerinde PHP kullanan biri olarak , geliştirme ortamınızı ayarlamak zorundasınız. Örneğin bir apache server ya da bir nginx server kurulumunu yapmak , gerekli PHP paketlerini yüklemek zorundasınız. Django’da ise , django kurulduktan sonra tek bir satır kod ile projeyi servis etme şansınız var.

Ancak bu durum tabi ki geliştirme süreci için geçerli. Projenizi yayına almak istediğiniz zaman elimizi biraz taşın altına sokuyoruz.

Başlamadan evvel sahip olmanız gereken şeyler ;

  • 1-VPS.
    Ben bunun için digitalocean ‘dan açtığım makineyi kullanıyorum. Fiyatı öğrenci arkadaşlar için uygundur.
  • 2-Domain
    Aslında domain sahibi olmasanız da olur , makinenizin ip adresini kullanarak da sonuçları görebilirsiniz. Ancak domain sahibiyseniz, DNS ayarlarınızın doğru olduğundan emin olun.

Bunların dışında kurulum sırasında gunicorn, supervisor, nginx ve virtualenv araçlarını kullanacağım. Ayrıca veritabanı postgresql kullanacağım. Her birini arama motorlarında aratarak kullanımlarını öğrenebilirsiniz. Ben bizim için gerekli olan kısımları açıklayacağım.

Başlamadan evvel aşağıdaki komutlarla depoları güncellemekte fayda var.

$ sudo apt-get update
$ sudo apt-get upgrade

Bu işlemden sonra postgresql’in kurulumunu yapalım.

$ sudo apt-get install postgresql postgresql-contrib

Kurulumdan sonra yeni bir kullanıcı ve veritabanı oluşturalım.

 

$ sudo su - postgres
postgres@MyDroplet:~$ createuser --interactive -P
Enter name of role to add:   django_db_user
Enter password for new role:
Enter it again:

Bu işlemden sonra size sorulan soruların tamamına hayır (n) diyebilirsiniz. Daha sonra ise yeni bir veritabanı oluşturalım.

 

postgres@MyDroplet:~$ createdb --owner django_db_user hello_django
postgres@MyDroplet:~$ logout

Bu durumda veritabanımızın kullanıcısı django_db_user , veritabanımız ise hello_django olarak ayarlanıyor.

Bu işlemden sonra virtualenv ortamını ayarlayalım. Virtualenv makine üzerine kuracağınız paketleri sanal bir ortama kurmak için kullanılır. Örnek vermek gerekirse elinizde 2 farklı Django ile yazılmış bir web projesi olduğunu ve bunların farklı sürümlerde çalıştığını hayal edin. Bu durumda iki adet virtualenv oluşturup her birine gereken sürümü yükleyebilir birbiriyle çakışmadan çalışmasını sağlayabilirsiniz.

$ sudo apt-get install python-virtualenv

Virtualenv kurduktan sonra bir tane oluşturmak için ;

$ sudo virtualenv /opt/myenv

Bu komut /opt/myenv dizinine bir virtualenv oluşturacaktır. Dediğimiz gibi makineye kuracağınız paketleri bu virtualenv ortamına kurmanız gerek. Dolayısıyla önce virtualenv ortamına geçiş yapmalısınız.
Bunun için ;

$ source /opt/myenv/bin/activate

Komutunu kullanmalısınız. Bu ortamdan çıkış yapmak için ise ;

$ deactivate

komutu yeterli olacaktır.

Virtualenv ortamına geçiş yaptıktan sonra,

$ pip install django

komutu ile django kurulumunu gerçekleştirebilirsiniz.

Bu işlemden sonra virtualenv ortamından çıkıp. Nginx kurulumunu gerçekleştirebiliriz.

$ sudo apt-get install nginx

komutu bu konuda problemlerinizi tamamıyla çözecektir.

Parçaları ayrı ayrı kurmamıza aldırmayın, birazdan bütün bu parçaları bir araya getireceğiz.
Nginx web projenizi servis etmeniz için bir konteynır biz nginx ile django projesini konuşturmak için arada gunicorn dediğimiz yazılımı kullanacağız.

Bu sebeple virtualenv ortamına geçip, gunicorn kurulumunu yapmalıyız.

$ pip install gunicorn

komutu ile gunicorn kurulumunu gerçekleştirelim.

Aslında gunicorn ile tek başına django projesini servis edebiliriz. Ancak ortada bir django projesi yok!
Öncelikle bir django projesi oluşturalım ve veritabanı bağlantısı için gerekli ayarları düzenleyelim. Tabi ki virtualenv ortamındayken – çünkü djangoyu bu virtualenv ortamında kurduk, bu ortam dışında django-admin.py’yi çalıştırmak isterseniz hata alırsınız –

$ cd /opt/myenv
$ django-admin.py startproject hello_django

 

komutları ile projemizi /opt/myenv dizini altına hello_django ismiyle oluşturalım.

Postgresql kurulumunu yaptık ancak python’un postgresql ile anlaşabilmesi için psycopg2 isimli bir kütüphaneye ihtiyacı var. Bu kütüphaneyi kurmak için de;

$ pip install psycopg2

komutunu yazıyoruz. Şimdi projenin içinde (/opt/myenv/hello_django/hello_django/) settings.py dosyasını düzenleyip veritabanı bağlantısını gerçekleştirelim.

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'hello_django',
'USER': 'django_db_user',
'PASSWORD': '********',
'HOST': 'localhost',
'PORT': '',
}

Yukardaki ayarları yaptıktan sonra tablolarımızı ilklendirebiliriz.Bunlar django ile ilgili olduğu için pek üstünde durmaya gerek yok.
$ cd /opt/myenv/hello_django
$ python manage.py syncdb

Şu ana kadar birşeyi atlamadıysanız veya bir kurulumda hata almadıysanız tablolarınız daha önceden açtığımız veritabanında işlenmiş olmalı. Postgresql dökümantasyonlarına bakarak gerekli kontrolleri yapabilirsiniz.

Söylediğim gibi aslında gunicorn ile projeyi tek başına servis edebilirsiniz. Gelin isterseniz gunicorn ile bir test yapalım.
$ cd /opt/myenv/hello_django
$ gunicorn hello_django.wsgi --bind 0.0.0.0:8000 --worker 3

komutlarıyla projenizi tıpkı

$ python manage.py runserver

der gibi servis edebilirsiniz. Şimdi makinenin ip’sini kullanarak(xxx.xxx.xx.xxx:8000 gibi) tarayıcıdan erişmeye çalışırsanız, karşınıza bir web sayfasının çıktığını görebilirsiniz. Static dosyalar görünmüyorsa , şimdilik kafanıza takmanıza gerek yok.

Ancak fark ettiyseniz projeyi gunicorn ile servis ederken bind veya worker gibi belli parametreler kullandık. Bu parametreleri komut satırı üzerinden vermek yerine bir python dosyasına yazarak verebiliriz.

Gelin bir konfigurasyon dosyası oluşturalım ve projeyi başlatmak istediğimizde hep bunu kullanalım.

$ cd /opt/myenv
$ sudo vi hello_django_gunicorn_cfg.py

command = ‘/opt/myenv/bin/gunicorn’
pythonpath = ‘/opt/myenv/hello_django’
bind = ‘127.0.0.1:8001’
workers = 3
user = nobody

Burda user yerine nobody değeri geçildi, burada user parametresi geçmeyebilirsiniz. Ancak sağlıklı bir web uygulamasının unix kullanıcısı ayrı ve hakları kısıtlıdır. Bu güvenlik açısından önemli bir noktadır. Dolayısıyla unix üzerinde bir servis kullanıcısı açmanızı , projenin dosya haklarını bu kullanıcıya vermenizi, gunicorn config dosyasına ise bu kullanıcının adını yazmanızı tavsiye ederim.

Ufak bir tüyo ile linux üzerinde şu komutla bir kullanıcı açabilirsiniz.

useradd --system --bash /bin/bash --home-dir /opt/myenv/hello_django hello_django_unix_user

Hatta daha sağlıklısı web uygulamalarının kullanıcılarını bir gruba atamak, örneğin webapps isminde bir gruba bu kullanıcıları dahil edebilir, gerekli unix yönetimini sağlayabilirsiniz. Ancak olayı şimdilik karıştırmaya gerek yok.

Üstteki işlemi yaptıysanız hello_django_unix_user ismindeki kullanıcıyı config dosyasına yazabilirsiniz.

Artık config dosyasını kullanarak projeyi başlatabilirsiniz.

Virtualenv aktif haldeyken,
$ gunicorn -c /opt/myenv/hello_django_gunicorn_cfg.py hello_django.wsgi

komutu ile daha demin yaptığımız işlemi yapabiliriz. Bind ettiğimiz nokta farklı bir nokta olduğu için tarayıcıdan erişmeniz mümkün olmayabilir. Ancak bu ayarların yanına nginx i kattığımızda gunicorn kendi içinde 8001 portunda çalışan bir sunucu gibi olacak, nginx ise ön planda durup gelen istekleri gerekiyorsa gunicorna gönderecek. Statik olan dosyaları ise nginx ile servis edeceğiz.

Nginx ayarlarını yapmadan önce statik dosyalar ile ilgili sorunlarımızı çözelim. Djangonun bu yönde güzel bir yanı var, kullandığınız bütün statik dosyaları tek bir noktaya toplayabiliyorsunuz. Bir django projesi oluşturduğunuzda admin paneli ile ilgili sayfaların dosyaları proje dosyaları içinde yer almaz, dolayısıyla projeyi taşıma esnasında sorunlar doğabilir. Bu nedenle django statik dosyaları tek bir noktaya taşımak için belirli yapılar geliştirmiş.

Öncelikle statik dosyaların nerede toplanacağını djangoya söylememiz gerekiyor. Bunun için settings.py dosyasına aşağıdaki tanımlamayı yapmalıyız.

STATIC_ROOT = '/opt/myenv/hello_django_static'

Dikkat ettiyseniz virtualenv içerisinde ama proje dosyalarının dışında bir nokta seçtim. Bu iyi bir çözümdür. Virtualenv içerisine koyarsanız başka projelerle karışmaz, proje klasoru dışarısına koyarsanız hem güvenlidir, hemde versiyon kontrol sistemlerini ignore etmekle uğraştırmazsınız. Bu tanımlamayı yaptıktan sonra;

$ cd /opt/myenv/hello_django
$ python manage.py collectstatic

komutu ile statik dosyalarınızı toparlayabilirsiniz. Bu işlemi yaptıktan sonra artık nginx ayarlarını yapmaya hazırız.

$ sudo vi /etc/nginx/sites-available/hello_django

server {
  server_name domain.com;

  location /static/ {
    alias /opt/myenv/hello_django_static;
  }

  location / {
    proxy_pass http://127.0.0.1:8001
    proxy_set_header X-Forwarded-Host $server_name;
    proxy_set_header X-Real-IP $remote_addr;
    add_header P3P ‘CP=”ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV”‘;
  }
}

$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/hello_django
$ sudo service nginx restart

Bu işlemlerden sonra

$ cd /opt/myenv/
$ gunicorn -c hello_django_gunicorn_cfg.py hello_django.wsgi

Diyerek gunicornu aktif ediyoruz ve domainimize girmeye çalışıyoruz. Bu aşamadan sonra projenizi düzgün bir şekilde görüyor olmalısınız. Ancak bir sorun var, tüm bunları runserver gibi bir komut çalıştırmadan otomatik olarak yapmak istiyorduk. Araya bir sürü yazılım soktuk ama bir adım ileri gidemedik gibi duruyor. Yapmamız gereken son iş elle yaptığımız bu tetikleme işlemini supervisor diye isimlendirilen bir yazılıma teslim etmek. Bu yazılım sayesinde kendi yazdığınız scriptleri arka planda, otomatik olarak çalıştırabilirsiniz. Bu programı kurmak için virtualenv dışında,

$ sudo apt-get install supervisor

komutunu kullanabilirsiniz. Uzun bir konfigürasyondan sonra son olarak supervisor ayarlarını da yapalım. Supervisor ayar dosyalarını /etc/supervisor/conf.d dizininde saklıyor. Dolayısıyla yapmamız gereken ;

$ cd /etc/supervisor/conf.d
$ sudo vi hello_django.conf

[program:hello_django]
command=/opt/myenv/bin/gunicorn -c /opt/myenv/hello_django_gunicorn_cfg.py hello_django.wsgi
autostart=true
autorestart=true
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log

Gördüğünüz gibi elle yazdığımız komudu command parametresinin değeri olarak yapıyoruz.Daha sonra supervisoru güncellemeliyiz.
$ supervisorctl reread
$ supervisorctl update

komutlarıyla çalıştırmaya başlayabiliriz. Restart atmak için ise;
$ sudo service supervisor restart

Dikkat etmeniz gereken bir nokta ise deploy aldığınız zaman statik dosyaları güncellemeyi unutmamak ve supervisor’ı da yenilemeniz atmanız olacaktır.

Django’da lokalizasyon

Arkadaşlar merhaba,

Bugün Django’da lokalizasyon işlemlerini nasıl yaparsınız aşama aşama söylemek istiyorum.  Django bizim için neredeyse tüm dil ve lokalizasyon işlemlerini düşünmüş. Tek yapmamız gereken biraz konfigürasyon. Django ile yaptığım bir uygulamaya dil desteği eklemek istediğimde , ilk başta ayarları tam oturtmak ve bunu anlamak zor olmuştu. Dökümantasyonda kaçırdığım bir kaç nokta yüzünden biraz süre kaybettim diyebilirim. O yüzden aşama aşama neler yapılması gerektiğini buraya yazmak istedim.

(daha&helliip;)

Python Soket Programlama

Arkadaşlar bugün Python ile farklı bir alana değinmek istiyorum. Python çok yönlü bir dil ve biz Python ile soket programlama da yapabiliyoruz. Nedir soket programlama , en basit tabirle network programlamadır arkadaşlar , iki sistem arasında haberleşme, veri alışverişi kontrollerini programlama dersek çok yanlış olmaz.

En temel olarak bir server betiği , bir de client betiği yazarak başlayacağız . Pythonda soket programlama yapmak için gerekli kütüphanemiz , “socket”.

İlk olarak server betiğini yazmakla başlayalım. Bunu en basit olarak web serverlarını düşünebilirsiniz arkadaşlar. Tarayıcınızı açtınız , http://www.google.com yazdınız. Sunucu otomatik olarak sizi sitemizin dosyalarının oldugu makineye yönlendiriyor. Tabi ki tam olarak böyle değil ama ben sadece kafanızda bir şablon oluşması için şekillendirmek için böyle söylüyorum. Şimdi bu yönlendiğimiz makine aslında bizi kapıda bekliyor. Siz linke tıkladığınız anda sizi içeri davet ediyor. İşte ilk olarak biz kapıda bekleyen o programı yazmaya çalışacağız.

Tabi ki ilk olarak “socket” kütüphanesini import edeceğiz.

import socket

Python’da socket programlamaya başlamak için bir socket nesnesine ihtiyacınız vardır arkadaşlar. Hemen bunu nasıl oluşturacağımızı görelim.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

Şimdi karmaşık gibi geliyor olabilir. Hani dedik ya bizi kapıda bekleyen biri var. O sizi görür görmez içeriye almayacaktır tabi ki , arada belli protokoller olmak zorunda. Burada argüman olarak verdiğimiz AF_INET , SOCK_STREAM gibi ifadeler aslında bu protokollerdir arkadaşlar. Bağlantımız sırasında hangi protokolü kullanacağımızı burada belirliyoruz. Bunları internette araştırarak daha ayrıntılı bilgi alabilirsiniz. Şu an konuyu çok saptırmadan devam etmeye çalışıyorum. Şimdi bir nesneye sahibiz. Bu nesne ile server oluşturacağız.

Server oluşturmak için bir makineye ihtiyacımız var , biz bu makineyi “localhost” , yani betiği yazmış olduğumuz makine olarak seçelim. Şimdi misafiri için evimiz var ama kapımız yok , kapımız ise portumuz olacak arkadaşlar. Herhangi bir port numarası uydurabilirsiniz , ancak 4 haneli rakam seçmeniz , sık kullanılan port numaralarıyla karışmaması açısından daha elverişli olacaktır. Makineyi localhost , port numarasını ise 8000 olarak seçtim ben.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000

Hala bunun bir servera benzer tarafı yok , client da yazıcak olsak aynı şekilde başlayacaktık. Gelin bunu bir server haline getirelim artık. Bir makine ve o makine de bir port oluşturmak için “bind” methodu kullanılır arkadaşlar.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)

Burada lütfen parantezlere dikkat edin arkadaşlar. Şimdi bind methodu ile bir makine oluşturduk ve bir port açtık. Sıra geldi misafir beklemeye. Bunun içinde listen methodunu kullanıyoruz arkadaşlar.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)
print “Kullanıcı bekleniyor.”
soket.listen(1)

Burada listen içerisine verilen argüman , kaç tane misafirin kuyrukta bekleyeceğini belirliyor diyebiliriz. Şimdilik tek misafir için çalıştığımızdan bunu 1 olarak yazdım ben. Ayrıca programı bu şekilde çalıştırdığınızda program listen methodunu gördüğü anda beklemeye başlıcaktır arkadaşlar. Tıpkı input() methodunu yazdığınızda klavyeden entera basmanızı beklediği gibi. Bunun anlamı serverın kullanıcıyı içeriye almaya hazır olduğudur. Diyelim ki bir misafir geldi kapımızı çaldı. Şimdi bağlantıyı kabul edip , misafiri tanımlamalıyız.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)
print “Kullanıcı bekleniyor.”
soket.listen(1)
baglanti,adres = soket.accept()
print “Bir bağlantı kabul edildi.”,adres

Evet şimdi accept methodu çıktı karşımıza. Şimdiye kadar kullandığımız bütün methodlar zaten ingilizce ,accept ise burada onaylamak anlamında ve gerçekten ne işe yaradığını ele verir nitelikte. Şimdi accept methodu bir tüp döndürür arkadaşlar. Bu tüpün birinci elemanı bağlantı nesnesini – daha sonra veri alışverişi yapmamızı sağlayan nesne- , ikinci eleman ise , kapımıza gelen misafirin kim olduğunu saklar.
Bağlantıyı aldık madem, eve gelen misafire ilk söylenen şey nedir ?
“Hoşgeldiniz efendim , hoşgeldiniz.”

Hemen söyleyelim.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)
print “Kullanıcı bekleniyor.”
soket.listen(1)
baglanti,adres = soket.accept()
print “Bir bağlantı kabul edildi.”,adres
baglanti.send(“Hoşgeldiniz efendim , hoşgeldiniz.”)

Artık burada send methodunun ne işe yaradığını söylemek ayıp olur diye düşünüyorum. Herşey basit değil mi ?

Şimdi biz hoşgeldiniz dediysek , onlarda bir cevap verecektir. Verdikleri cevabı almamızı sağlayan method ise , recv() methodu. Hemen görelim.

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)
print “Kullanıcı bekleniyor.”
soket.listen(1)
baglanti,adres = soket.accept()
print “Bir bağlantı kabul edildi.”, adres
baglanti.send(“Hoşgeldiniz efendim , hoşgeldiniz.”)
data = baglanti.recv(1024)
print data

Burada recv methoduna verdiğimiz 1024 argümanı , veri büyüklükleriyle ilgili bir durumdur. Şimdilik kafanıza takmanıza gerek yok. Bu konuda daha ileri seviye programlar yazmak isterseniz araştırabilirsiniz.

Şimdi misafir geldi , ağırladık ettik derken uğurlamamız gerek. Bunun içinde close methodunu kullanabilirsiniz arkadaşlar. Basit olarak;

server.py ###############################################################

import socket
soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.bind((HOST,PORT))
print “%s:%d server başlatıldı.” % (HOST,PORT)
print “Kullanıcı bekleniyor.”
soket.listen(1)
baglanti,adres = soket.accept()
print “Bir bağlantı kabul edildi.”, adres
baglanti.send(“Hoşgeldiniz efendim , hoşgeldiniz.”)
data = baglanti.recv(1024)
print data
soket.close()

şeklinde yazabilirsiniz.

İşin sunucu / server tarafını kafanızda birşeyler oluşsun diye böyle anlatmak istedim. Client kısmını daha rahat anlayabilirsiniz şimdi.

client.py
#######################################

import socket
soket = soket.socket(socket.AF_INET,socket.SOCK_STREAM)
HOST = “localhost”
PORT = 8000
soket.connect((HOST,PORT))
data = soket.recv(1024)
print data
soket.send(“Hoşbulduk!!”)
soket.close()

Kodların gerçekten anlaşılır olduğunu düşünüyorum. Ancak yine de üstünden geçelim. İlk olarak yine bir soket nesnesi oluşturduk ve server bilgilerimizi girdik. Burada server bilgilerinin her iki betikte de aynı olması gerekmektedir. Daha sonra bu server bilgilerini ve soket nesnesini kullanarak , connect methodu yardımıyla servera bağlanmak istedim. Ve serverdan gelen veriyi recv methodu ile alıp data isimli değişkene atadım. Bu değişkeni ekrana yazdırıp , aynı şekilde send methodu ile bir cevap yolladım.

Elimizde iki ayrı program oldu. Bunlardan birisi server öteki client. Öncelikle serverımızı çalıştırıp hazır hale getiriyoruz. server.py listen komutunu çalıştırdığında kendini beklemeye alacaktır. O öyle çalışır durumdayken, biz client.py betiğini çalıştırıyoruz ve yaptığımız işleri gözlemliyoruz.

Host bilgilerini 192.168.2.x şeklinde ayarlayarak isterseniz aynı modem üzerindeki iki ayrı makinede bunu deneyebilirsiniz. Bu sayede ağdaki diğer makineler üzerinde backdoor yazabilirsiniz.

Nedir bu Django ?

Nedir bu Django ?

Django , Python ile yazılmış bir web çerçevesidir. Biraz geriye gidecek olursak web uygulamalarının temeli CGI (Common Gateway Interface)’e dayanır. CGI günümüzde
hala tercih edilse de , artık PHP gibi web uygulamaları geliştirmek için oluşturulmuş diller bile geliştirici isteklerini tam olarak karşılayamamaktadır. Geliştiriciler her uygulamada
kullanılabilecekleri bazı sistemleri hazır bulmak isterler. Bu ihtiyaçtan ötürü de web çerçeveleri dediğimiz yapılar oluşmuştur. İşte Django’da gerçekten yüksek performanslı bir web çerçevesidir. Ayrıca Python’un kolay ,esnek ve güçlü yapısını da sahiptir.

Daha önce çalışan bir web uygulaması yazmadıysanız bile, temel Python programlama ve HTML bilgisine sahipseniz Django ile kısa sürede web uygulama mantığını kavrayabilir ve kendi uygulamalarınızı yazabilirsiniz. Ancak bir noktaya dikkat çekmek isterim , Türkçe kaynak konusunda gerçekten sıkıntı yaşayabilirsiniz. Bu nedenle hiç olmazsa dökümanları okuyacak kadar İngilizce bilmeniz , yararınıza olacaktır. Türkçe kaynak olarak ise , Mustafa Başer’in yayınladığı Django isimli kitabı önerebilirim.

Django’ya İlk Adım: Kurulum

Bir önceki yazımızda Django’nun tanıtımını yapmıştık. Eğer ben bu Django’yu öğrenmeye karar verdim diyorsanız , sisteminize nasıl kuracağınızı bu yazımızda anlatacağız. Django , Python ile yazılmış bir web çerçevesi olduğundan öncelikle Python 2x sürümlerinden birini sisteminize kurmanız gerekmektedir.
Buraya tıklayarak Python’u indirebilirsiniz. Eğer sisteminiz 32 bit ise , Windows x86 MSI Installer seçeneğini kullanmanız gerekir. Bu indirdiğimiz dosya .msi dosyası olacağından,
hiçbir ayarlama yapmadan sadece tıklayarak kurulumu gerçekleştirebilirsiniz. Eğer kurulumu default olarak yaptıysanız , Python C:\ kök dizinine Python(SurumNo) şeklinde yüklenecektir.

(daha&helliip;)

Python’un güçlü veritabanı: Sqlite

Arkadaşlar bugün sizlere Python ile birlikte gelen ve en az piyasadaki diğer veritabanları kadar güçlü olan Sqlite’den bahsetmek istiyorum.
Programlarımızda verilerimizi düzenli bir şekilde tutmak , programımız kapandığında verilerimizi kaybetmemek için veritabanına ihtiyaç duyarız.
Sqlite ise python ile program yazarken ek bir yükleme yapmadan veritabanı oluşturma , veri ekleme , silme düzenleme gibi bütün işlemleri yapabileceğiniz bir ortam sunar.

Tabi ki programlarınızda sqlite kullanmak için önce programınıza import etmek zorundasınız.

import sqlite3

Bu işlemi yaptıktan sonra bir veritabanı oluşturmak , veya var olan veritabanına bağlanmak için;

import sqlite3
baglanti = sqlite3.connect(“/home/grnt/Masaüstü/veritabani.db”)
baglanti.close()

(daha&helliip;)