Bu yazımızda kullanıcıya unutulan şifre için şifre sıfırlama maili göndermeyi göstereceğim.

Öncelikle mail gönderme işlemleri için kullanacağımız servis sağlayıcıyı seçiyoruz. Ben Yandex'i seçtim. Daha sonra settings.py dosyamıza e-mail gönderebilmek için gerekli ayarlamaları yapıyoruz.


Daha sonra views.py dosyamıza eğer eklemediysek gerekli django.contrib.auth modüllerini ekliyoruz.


views.py dosyasına gerekli eklemeleri yaptıktan sonra django'nun default şifre yenileme sayfasını urls.py dosyasına ekliyoruz.

İstediğimiz url'leri seçerek ya da hepsini birden ekleyebiliriz.


views.py ve urls.py dosyalarına gerekli eklemeleri yaptık. Şimdi e-mail gönderme işlemi çalışıyor mu test edelim.

Tarayıcımızdan http://127.0.0.1:8000/password_reset sayfasına giriyoruz. Herhangi bir template oluşturmadığımız için bizi default Django Password Reset sayfası karşılıyor.


Daha önce kayıt olmuş bir kullanıcının mail adresini giriyoruz ve Reset my password butonuna tıklıyoruz.

Ve e-mail'imiz geldi.


Geriye sadece /password_reset sayfasını HTML kodumuza eklemek kalıyor.

Bu yazımızda Django'da şifre sıfırlama mailinin nasıl gönderileceğini anlattık, bir başka yazımızda görüşmek üzere esen kalın...


Detay Sayfasının Oluşturulması Projemizde yazılmış olan gönderilerin ayrıntılı bir şekilde gösterileceği bir sayfa oluşturarak başlıyoruz. ilk olarak templates dizini altına bir adet "detay.html" adında sayfa oluşturuyoruz. Bu sayfada blogta yer alan gönderiye ait video, resim gibi içerikleri görüntülenecek. Ardından blog uygulamamızın altına yeni bir model oluşturmamız gerekli, bunun için models.py dosyasının içerisine;
slug = models.SlugField(max_length=80, null=True, blank=True, help_text=u"Link otomatik alinir, Lutfen Degistirmeyiniz!")
kodunu yerleştiriyoruz. Model kodlandı bunun uygulamamıza uygulanması için;
./manage.py makemigrations
./manage.py migrate
komutlarını pycharm terminalden ilgili projede çalıştırıyoruz. Böylelikle uygulamamız için gerekli model blog paneline ve veritabanına yansımış ve oluşturulmuş oluyor. Blog detay sayfası için oluşturduğumuz model ile gerekli olan Slug temel, basit ismi kullanarak ulaşım sağlayacağız. Detaylar için Html sayfamız oluşturmuştuk. Bu sayfaya yönlendirme yapmak için view oluşturmamız gerekli, blog uygulamamızın içindeki views.py dosyasına;
def detay(request, url):
     val = Blog.objects.get(slug = url)
     return render(request, 'detay.html',locals())
kodunu ekleyerek yeni bir tanım yapmış olduk. Bununla birlikte "val" adında kullanabileceğimiz detay sayfasına ait bir nesne tanımlamış olduk. Detay sayfasınına yönlendirme için son bir adımımız kaldı. Proje içerisinde yer alan urls.py içerisinde eklemelerin yapılması, kodun tamamı yer almakta gerekli düzenlemeleri ihtiyacınıza göre düzenliye bilirsiniz.
urlpatterns = [
    url(r'^$', views.index , name='index'),
    url(r'^admin/', admin.site.urls),
    url(r'^detay/(?P[^/]*)/$', views.detay , name='detay'),
]

urlpatterns += [
    url(r'^media/(?P.*)$', serve, {'document_root': settings.MEDIA_ROOT,}),
    url(r'^static/(?P.*)$', serve,{'document_root': settings.STATIC_ROOT,}),

]

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Biz bu kodda sadece 4.satır olan detay kısmını ekledik diğer "static" ve "media" kısımları resim ve video ile ilintilidir. Projede medya ve statik kullanımı için bir iki küçük eklenti daha yapmamış olmamış gerekiyor. Bu eklentiyi de proje de yer alan settings.py içerisinde yapıyoruz. Geniş bir şekilde kod verilmiştir. konumunu doğru bir şekilde bulunabilmesi için;
TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/

STATIC_URL = '/static/'
MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, '../proje_media')
STATIC_ROOT = os.path.join(BASE_DIR, '../proje_static')

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

STATICFILES_DIRS = (BASE_DIR + '/static/',)

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

SESSION_COOKIE_AGE = 60*100 # 100 dakika sonra logout oturumu otomatik kapat

FILE_UPLOAD_MAX_MEMORY_SIZE = 510241024 # 5mb
gerekli olan kısımlar "media" ve "static" isimlerini içerek bölümlerdir. Böylelikle; Detay sayfamız çalışır bir hale gelmiş tüm hazırlıklarımızı tamamlamış olduk. Projemize Resim ve Video ekleme Blog gönderilerinin içerisine resim ve video ekleme yapacağız. Bunları da hazırlamış olduğumuz detay sayfasında görüntülemiş olacağız. İlk olarak modellerimizi oluşturalım.
    image = models.ImageField(upload_to='BlogResimleri/%Y/%m/%d', default='BlogResimleri/blog.png')
    video = models.FileField(upload_to='Videos/%Y/%m/%d', blank=True)
    link = models.URLField(blank=True)
Yukarıdaki kodlarda bir adet resim içeriği tutacağımız bir model açıktık. İki adette video tutmak için model oluşturduk. İlk ki bir video dosyasını içeride tutacağımız, diğeri ise dışarıda örnek olarak youtube'dan alacağımız link ile tutacağımız video modellerimiz oluşturulmuş oldu.Sırada yazmış olduğumuz modellerin oluşturulması için;
./manage.py makemigrations
./manage.py migrate
komutlarını çalıştırdık. Projemizi çalıştırarak admin paneline gidiyoruz buradan, yeni bir blog içeriği oluşturup, içerisine media dizini içerisine yerleştireceğimiz video ve resim dizinleri altında yer alan görüntülenecek olan içerikleri ekliyoruz. Bu görüntülemeler detay sayfasında yer alacağı için detay.html içerisine resim için; Videoyu dizinden göstermek için; Videoyu link üzerinden göstermek için; kodlarını kullanıyoruz. Vermiş olduğunuz views içerisindeki nesne ismine göre "val" farklı olabilir ya da model isimlerinize göre "val.link" veya "val.video" farklı olabilir. Dizinden bir şeyler çektiğimiz "upload_to" kaynak içeren modellerimiz için sonlarına "val.video.url" gibi ".url" eklemesi yapıyoruz. Son işlemimiz ise videolarımızı görüntülerken kullanıcı eğer video yüklediyse onu, ya da linkte yer alan videoyu göstereceğiz. Sonuç olarak bir adet video içeriği görüntülenmiş olacak. bunun için video görüntüleme kodlarımızı SNIPPET dediğimiz "{% %}" işaretleri içerisine alıp basit bir if koşulu kullanacağız.
Meşe Bilişim Software Testing dersinde öğrendiğimiz Django web çatısı blog yazılarına devam ediyoruz. Bu yazımda oluşturduğumuz web uygulaması için veritabanı kurma işleminden kısaca bahsedeceğim.

(myvenv)  ~/mesebilisimsw/proje/proje 


├── __init__.py

├── settings.py
├── urls.py
└── wsgi.py

Proje dizinimizde settings.py dosyası içerisinde DATABASE alanında web uygulamalarımız için kullanacağımız veritabanını görebiliriz. Django web çatısı varsayılan olarak SQLite veritabanı kullanmaktadır.

Geliştirmekte olduğumuz "blog" uygulaması için biz de SQLite veritabanı kullanacağız. Varsayılan olarak Django bu veritabanını kullandığı için settings.py dosya içeriğinde bir değişiklik yapmamıza gerek yok fakat bu durumun nasıl olduğunu bilmemizde fayda var.

Kısaca SQLite veritabanından bahsetmek gerekirse; açık kaynak kodlu C ve C++ programlama dilleri ile oluşturulmuştur. SQLite kullanımı son derece kolaydır ve bu yönüyle ön plana çıkmaktadır. Platform bağımsız olarak çalışmaktadır.

Konumuza dönecek olursak; settings.py dosyası içerisinde yer alan DATABASE değişkenini inceleyelim.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

Varsayılan olarak SQLite veritabanı kullanıldığını söylemiştik, yukarıda da bu durum doğrulanıyor. Django projelerimizde dilersek; PostgreSQL, MySQL ya da Oracle veritabanlarını da kullanabiliriz.

SQLite dışında bir veritabanı kullanımı, şu aşamada bizim için yüksek maliyetli bir iş olduğundan varsayılanı değiştirmeyeceğiz. Bir veritabanının kurulumu dahi vaktimizi alabilir, hızlıca projemize devam edelim.

"ENGINE" değişkeni ile SQLite'ı (veritabanı paketini)  import ediyoruz. Bu şekilde kullanacağımız database belirlenmiş oluyor.

"NAME" değişkeni ile 'db.sqlite3' yani bir SQLite veritabanı tanımlıyoruz. SQLite için dosya konumunu belirtiyoruz. (SQLite her veritabanı için sadece bir dosya oluşturmaktadır.)

Şayet farklı bir veritabanı kullanmak isteseydik ENGINE değişkenin aldığı değerleri şu şekilde değiştirmemiz gerekirdi;

MySQL => django.db.backends.mysql
Oracle => django.db.backends.oracle
PostgreSQL => django.db.backends.postgresql_psycopg2

Veritabanı ile ilgili daha fazla değişken ve detaylı anlatım bu yazının hedefi olmadığı için ayrıntıları yazıya dahil etmeyeceğim. Django ile proje geliştirirken daha fazlasını bilmek isteyenler https://docs.djangoproject.com/en/1.9/ref/databases/ adresine göz atabilirler.

Eksik yada hatalı bir anlatım mevcut ise lütfen yorum bölümünde paylaşarak katkıda bulununuz.


Meşe Bilişim şirketinde Software Testing dersi süresince öğreneceğimiz Django web çatısı hakkında ki yazı serimiz devam ediyor. Bu yazımızda da Django 1.9 sürümü ve GNU/Linux işletim sistemleri ile çalışıldığı varsayılmıştır.

Geçtiğimiz yazıda Django Proje Oluşturmaktan bahsetmiştik. Şimdi sıra ilk web uygulamamızı oluşturmaya geldi. Proje dizinimizde sanal ortamımızı (bkz:Virtual Environment nedir?) aktifleştirelim ve başlayalım.

(myvenv) ~/mesebilisimsw/proje $ python manage.py startapp blog

Yukarıda yer alan komutu terminal üzerinden işlettiğimizde Django bizim için ilk web uygulamamızı oluşturacaktır. Derslerimiz bir "blog" örneği üzerinden ilerlediği için uygulamamızın ismini "blog" olarak belirledik.

Projemizin yer aldığı dizinde oluşan yapının şu şekilde görünmesi gerekiyor.

├── blog
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── manage.py
└── proje
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

Başarılı bir şekilde ilk uygulamamızı oluşturduk. Bu adımın ardından projemizin settings.py dosyasında düzenleme yapmamız gerekiyor.

(myvenv) ~/mesebilisimsw/proje/proje dizininde yer alan settings.py dosyasını açınız. Projemiz ile ilgili ayarların yer aldığı bu dosya içerisinde INSTALLED_APPS bölümünü bulunuz ve "blog" uygulamamızı buraya ekleyiniz.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]

Değişiklikleri yaptıktan sonra görünümün yukarıdaki gibi olması gerekmektedir. Bu satırı ekleyerek web çatısına "blog" isimli uygulamamızı projemiz dahilinde kullanacağımızın bilgisini vermiş olduk. İlk Django web uygulamamızı bu şekilde oluşturmuş olduk.




Meşe Bilişim şirketinde Software Testing dersi süresince kullanacağımız araçlardan birisi olan Virtual Environment nedir, neden ihtiyaç duyuyoruz kısaca bu yazı ile bahsetmek istedim.

Python Virtual Environment; Türkçe ismi ile Sanal Ortam. Peki sanal ortamlara neden ihtiyaç duyuyoruz, bu araç hangi sorunun çözümü yazının geri kalanında bu soruya kapsamlı olmasa da yanıt vereceğiz.

Meşe Bilişim şirket kurucusu Şahin Mersin tarafından 2.hafta dersinde anlatılan Django kurulumu öncesinde bilmemiz gereken bir araç olan Sanal Ortam; birden fazla Python projelerinde olabilecek paket çakışmalarını önlemek amacı ile kullanılmaktadır.

Örnek vermek gerekirse; derste geliştirmekte olduğumuz blog uygulaması için Django 1.9 sürümünü kullanıyoruz. Fakat Django 2.0.2 sürümü yayınlandı. Sanal ortam aracılığıyla "blog" uygulamamızda Django 1.9 sürümünü kullanırken başka bir projede Django 2.0.2 yada farklı bir sürüm kullanabiliriz.


Sanal ortam sayesinde bir birinden ayrı projeler için yüklediğimiz yada sildiğimiz paketler, paket sürümleri birbirini etkilemez. Bu sayede projelerimizin yönetimi de bizim için daha kolay hale gelmektedir.

Virtual Environment kurulumu

python3 -m venv myvenv

Proje dizininde yukarıdaki komutu işlettiğinizde sanal ortamınız oluşacaktır. Oluşan sanal ortamın ismi de "myvenv" olacaktır. Burada dilediğiniz gibi isimlendirme yapabilirsiniz.

Terminal üzerinden verdiğimiz komut sonrasında sanal ortamımız oluştu fakat şu anda aktif değil kullanım için aktif etmemiz gerekmektedir.

cd myvenv/bin

source activate

Yukarıdaki komutları terminal aracılığıyla işlettiğimizde artık sanal ortamımız aktif ve bu proje için kullanacağımız web çatısı paket ve modüllerin sürümü sadece bu ortamımız için geçerli olacak. Oluşturulan bu izole ortam sayesinde tüm projelerimiz birbirinden ayrı şekilde karışıklık olmadan yönetilebilir hale getirdik.

Daha fazlası için; https://docs.python.org/3/tutorial/venv.html



Virtual environment, Python tabanlı uygulamalarımız için izole bir sistem oluşturmamızı sağlar. Bu anlam olarak her projenin kendine has bağımlılıklara
sahip olması ile açıklanabilir. Bu sistem ayrıca versiyon uyuşmazlıklarının önlemek için birden fazla virtual environment oluşturulmasını gerektirir.
En basitinden kullandığımız sistem üzerinde farklı çalışmalarımız için farklı Python versiyonları bulundurmamız gerekebilir(Örneğin 2.7& 3.6 gibi).
Virtual environment ayrıca proje üzerinde kolay yönetime ve denetlemeye imkan tanır. Virtual enviroment kendine spesifik bir sunucu sistemi üzerinde çalışır. Kullandığımız
paketler bu sistem içerisinde tutulacağı için çalıştığımız işi kaldırmak istediğimizde, üzerinde çalıştığımız diğer projeleri etkilemeden kolaylıkla bu eylemi
gerçekleştiririz. Virtual environment globalde bulunan modül ve kütüphanelerimize linkler aracılığıyla bağlanır.Bu bize alan tasarrufu ve özellikle büyük verilerle
uğraştığımız, zamanın daha ön planda olduğu hesaplama işlerinde hız kazancı sağlar.

KURULUM

1-)Öncellikle bizim üzerinde çalışacağımız proje Python 2 üzerinde olacağı için pip aracılığı ile aşağıdaki command ile kolaylıkla gerçekleştirilebilir.

pip install virtualenv

*Python 3 üzerinde geliştirme yapılacaksa dilin kendi standard kütüphanesi içerisindeki venv modülü kullanılabilir.
(virtualenv ile venv birbirinden çok farklı toollardır(komut ve bazı işlevleri ile); buradaki açıklama virtualenv için geçerlidir.Python 3 tabanlı geliştirme yapılacaksa venv incelenmelidir.)

2-)Çalışma ortamı için yeni bir klasör oluşturulması gerekir.Aşağıdaki ifade çalıştırılır.

mkdir ~/virtualenv

Oluşturduğumuz ortam içerisinde, uygulamamız ve Python sürümümüzün temiz bir kopyası bulunmalıdır.Aşağıdaki ifade çalıştırılır.

virtualenv ~/virtualenvironment/proje

Projemizle çalışabilmemiz için, buluntuğu dizine gelmemiz ve virtual environmenti aktif etmemiz gerekir. Virtual environmenti aktif etmek, sistemin $PATH değeri üzerinde değişiklik yapar.Ortamımızı aktif ettiğimizde virtual enviromentimizin "bin" klasörü $PATH içerisinde başlar.Teorik olarak ikisi arasında bir fark yoktur. Virtual environment symlinkini sistemimizin Python binarysine "bin" bağlar.

cd ~/virtualenvironment/proje/bin

Son olarak ortamı aktif etmek için;

source activate

Bu aşamadan sonra pip veya easy_install get installed into proje/lib/python2.7/site-packages
dizini altında istediğimiz paketleri tutup, kullanabiliriz.
Meşe Bilişim'de şirket kurucusu Şahin Mersin'in anlatımı ile ilk uygulamamızı ve projemizi oluşturduk. Kısaca ders esnasında gerçekleştiridiğimiz ve öğrendiğimiz adımlardan bahsedeceğim. Sürç-i lisan edersem lütfen yorum bölümünde düzeltiniz.

Django web çatısı, Git sürüm kontrol sistemi, Ubuntu işletim sistemi gibi ders içerisinde kullanacağımız unsurlardan daha önce bahsettim, bu yazıda kullanacağım ifade edeceğim her bilgi GNU/Linux dağıtımı üzerinde paragrafın başında bahsettiğim unsurlar ile gerçekleştirilmektedir.


Proje Oluşturma

Django ile ilk projemizi oluşturmaya başlayalım. Öncelikle projemizi oluşturacağımız dizinde projelerimizin yer alacağı bir klasör oluşturalım. Meşe Bilişim Software Testing dersi dahilinde uygulama geliştirdiğimiz için ben klasöre "mesebilisimsw" ismini vereceğim.

mkdir mesebilisimsw

Komut satırından yukarıdaki komutu işlettiğimizde bizim için bulunduğumuz dizinde "mesebilisimsw" isimli bir klasör oluşturur. 

cd mesebilisimsw

Bu komut ile oluşturduğumuz klasör içerisine geliriz. Projelerimizi burada oluşturacağız ve ilk projemiz bir "blog uygulaması" olacak. Fakat biz öncelikle sanal ortamımızı oluşturalım.

python3 -m venv myvenv

Yukarıdaki komut ile bir virtual environment oluşturduk. Python/Django kurulumlarımızı her proje için ayrı tutmaya yarayan bu araç son derece gereklidir, lütfen bu adımı atlamayınız. Sanal ortam kurulumu ve ayrıntılarından bir başka yazıda bahsedeceğim.

cd myvenv/bin

source activate

Sanal ortamımız kurulduktan sonra bu ortamı aktif etmemiz gerekmektedir. Bu nedenle sanal ortamımızın bulunduğu dizin içerisinde bin klasörü içerisinde aktif etmemiz gereklidir. Yukarıdaki komutları işlettiğinizde sanal ortamın aktifleştiğini göreceksiniz.

pip install --upgrade pip

Artık pip kurulumuna geçebiliriz. Bu projemiz için gerekli olan en güncel pip paket yöneticisini kurulumunu yukarıdaki komutu işleterek gerçekleştirelim.

pip install django~=1.9

Yukarıdaki komutu işlettiğimizde bizim için Django web çatısının 1.9 sürümünü kuracaktır. Komut satırında şu şekilde bir çıktı göreceksiniz.


Collecting django~=1.9
  Downloading Django-1.11.10-py2.py3-none-any.whl (6.9MB)
    100% |████████████████████████████████| 7.0MB 111kB/s 
Collecting pytz (from django~=1.9)
  Using cached pytz-2018.3-py2.py3-none-any.whl
Installing collected packages: pytz, django
Successfully installed django-1.11.10 pytz-2018.3

Başarılı bir şekilde kurulum gerçekleşti şayet bir hata mesajı görüyorsanız, öncelikle "pip" paket yöneticisini güncellediğinizden emin olun ardından "pip install django" komutunda bir syntax hatası var mı kontrol edin yada en kolayı ve doğrusu olan hata mesajını okuyunuz. 

django-admin startproject proje


İlk projemiz olması nedeniyle projemizin adını akılda daha kalıcı olması için "proje" olarak oluşturuyorum. Bu adım bazılarımız için kafa karıştırıcı olabilir fakat derste bu şekilde tercih ettik.

Bu adımı Pycharm üzerinden de gerçekleştirebiliriz fakat ben bir IDE kullanmadığım için bu konu hakkında pek bilgi sahibi değilim. İsterseniz Pycharm aracılığı ile de bu işlemi gerçekleştirebilirsiniz.


├── manage.py
└── proje
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

Startproject komutumuzun ardından "proje" isimli klasörümüz içerisinde şu şekilde bir yapı göreceğiz. Burada oluşan py uzantılı dosyalardan kısaca bahsedelim.

manage.py Django uygulaması olan sitemizi yönetmemizi sağlayan scripttir. Bu script ile web sunucusu da başlatabiliriz ve tüm projemizi yöneten komutları işletebiliriz.

settings.py Django uygulamamız ile ilgili yapacağımız ayarlamaları barındırır.

urls.py Django uygulamamızda bir yönlendirici görevi üstlenir.

Tüm bu işlemlerin ardından bir şeylerin çalıştığını görmek sanırım bu yazıyı da amacına ulaştıracak. Bu nedenle "manage.py" scriptinin bulunduğu dizinde aşağıdaki komutu işletelim.

python manage.py runserver

Bu komut "migrate" hatası verse dahi çalışacaktır. Sunucumuzun başladığını ve "It worked" çıktısını görüyorsanız ilk Django projenizi başarı ile oluşturdunuz demektir.










Python programlama dili yazılmış, web uygulamaları geliştirmek için tasarlanan Django  açık kaynak kodlu bir web framework, bir başka deyişle web çatısıdır. Django web çatısı BSD lisansı ile lisanslanmıştır. Merak edenler için lisans hakkında ayrıntılı bilgi "http://ozgurlisanslar.org.tr/bsd/" adresinde bulunmaktadır.

Django web çatısı ile kısa sürede Web uygulamaları oluşturmak mümkündür. Web geliştirme ile ilgili geliştiricilerin tekerleği tekrar icat etmesine yada Amerika'yı tekrar keşfetmesine gerek bırakmayan açık kaynak kodlu bu Web çatısı, Software Testing isimli ders süresince Meşe Bilişim şirketinde öğrenim unsurumuz olmaya devam edecek.

Meşe Bilişim şirket kurucusu Şahin Mersin ile giriş yaptığımız Django web çatısı hakkında nedir, neden kullanılır, nasıl kullanılır gibi sorulara bu seride cevap arayacağız. Elimden geldiğince bir süredir öğrenmekte olduğum Django web çatısı ile bildiklerimi buradaki yazılara aktarmaya çalışacağım, hatalı bir ifadem olursa, lütfen es geçmeyiniz ve yorum yaparak düzeltiniz.

Django web çatısı, geliştiricilerin ihtiyaç duyduğu birçok ortak Web uygulama ihtiyacını bünyesinde bulundurur. Örneğin, kullanıcı kimlik doğrulama, içerik yönetimi, site haritası, RSS özet akışları bunlardan bazılarıdır.

İlk kez Django web çatısı ile uygulama geliştirdiğimizde beni şaşırtan henüz yarım saat gibi bir süre geçmeden admin paneli ve kullanıcı girişi olan bir uygulamayı ortaya çıkarabiliyor oluşumuzdu. Bahsettiğim dinamik yönetim panelini daha detaylı bir şekilde anlatmaya çalışacağım.

Django web çatısı kolay kurulumu, detaylı hata raporu sayfaları, özelleştirilebilen yönetim paneli ile ön plana çıkıyor ve karmaşık olabilecek birçok işlemi basit bir şekilde gerçekleştirmemizi sağlıyor.


Django tasarım deseni olarak Model View Template (MVT) kullanmaktadır.

Model; veritabanı işlemlerinin gerçekleştiği alandır. Django ile SQL komutları kullanmadan veritabanı oluşturmak hazırlamak mümkündür.

View; web uygulamamızı geliştirdiğimiz alandır, geliştirici birçok işlemi bu alanda gerçekleştirmektedir.

Template; bu alan ise tasarım kısmıdır. Yeniden kullanılabilirliğin de sağlanabildiği bu alanda tasarım ile ilgili çalışmalar gerçekleştirilir.


Django ile IoS, Android, Windows, Linux gibi işletim sistemleri üzerinde çalışma yapmak mümkündür. Django ile ilgili merak ettiğiniz ayrıntıları www.djangoproject.com adresi üzerinden görüntüleyebilirsiniz.

Web çatısı Django ile Meşe Bilişim'de gerçekleşen derslerimizde ilk olarak bir "blog" uygulaması gerçekleştireceğiz. Şirket kurucusu Şahin Mersin'in anlattığı derslerin ardından 10 kişilik öğrenci grubumuz bir blog sitesi hazırlayabilir duruma geldi. İlerleyen yazılarda basit bir "blog" uygulaması nasıl yazılır anlatmaya çalışacağım.

Ders süresince kullanacağımız Web çatısı Django hakkında kısaca bahsetmiş olduk. Blog uygulaması ile bu web çatısını detaylı öğrenmeye devam edeceğiz.

Kaynakça: www.djangoproject.com



Meşe Bilişim şirket kurucusu Şahin Mersin ile birlikte Software Testing derslerimize devam ediyoruz. Ders süresince kullanacağımız Git sistemi ile ilgili kısa bir yazı yazmak istedim. Bu yazının amacı ders sırasında öğrendiklerimizi yazılı hale getirmek ve sistem hakkında daha fazla merak uyandırmaktır. Git ile ilgili birçok bilinmesi gerekeni yazıya dahil etmeyeceğim.

Git bir sürüm yada versiyon kontrol sistemidir. Versiyon kontrol sistemi; bir kaynak kodda meydana gelen değişiklikleri takip edebilmemizi sağlar. Basitçe ifade edersek Git sistemi bu değişiklerin kaydını ve içeriğini kullanıcısı için takip eder ve kayıt altına alır.

Versiyon kontrol sistemleri birden fazla kişinin yer aldığı projelerde aynı dosyalar üzerinde güvenli olarak çalışma imkanı sağlamaktadır. Versiyon kontrol sistemleri sayesinde değişikliklerin yapıldığı dosyalar doğru bir şekilde birleştirilebilir.Üzerinde çalışılmakta olan projenin versiyonları da sistem sayesinde kayıt altına alınır.

Linus Torvalds ve Linux ekibi tarafından geliştirilmeye karar verilen Git sürüm versiyon kontrol sistemi 2005 yılından bugüne geliştirilmeye devam edilmektedir. Git sisteminin yazılım bakımını şu anda Junio Hamano üstlenmiştir.

GNU Genel Kamu Lisansı'nın ikinci sürümü ile lisanslanan Git sistemi "özgür yazılım" olan bir üründür. Bu ürünü kullanan şirketler veya projeler arasında Google, Facebook, Microsoft, Twitter, Linkedin, Netflix, Android, Gnome, Eclipse, Rails, PostgreSQL gibi bilinen isimler yer almaktadır.

Git ile Çalışmak

Git kullanıcıları komut satırı arayüzü ve görsel arayüz ile sistemi kullanabilirler. Git Windows, Mac OS X, GNU/Linux işletim sistemlerinde kullanılabilmektedir. Her işletim sistemi için çeşitli kurulum yöntemleri bulunmaktadır, bu yazıda kurulum bölümünden bahsetmeyeceğim.

Git kurulumunu tamamladıktan sonra, kullanıcı adı ve email ayarlarınızı gerçekleştirmelisiniz. Bu ayarları gerçekleştirmek için aşağıda yer alan komutları kullanabilirsiniz. --global kelimesi Git'e global ayarlarımızı düzenlediğimizi belirtiyor. Ardından kullanıcı adı ve kullanıcı mail adreslerimizi sisteme kayıt ediyoruz.

git config --global user.name "kullaniciadiniz" git config --global user.email "kullanicimailiniz"

Yukarıda yer alan işlemleri tamamladıktan sonra Git sürüm kontrol sistemini bir projenizde kullanmaa başlayabilirsiniz. Git kullanmak istediğiniz dosya dizinine gelerek komut satırından

git init

komutunu işlettiğinizde projeniz için henüz boş olan bir repository oluşur. Fakat henüz dizinde yer alan herhangi bir dosya sürüm kontrol sistemi altına alınmamıştır. Dizinde yer alan tüm dosyaları sürüm kontrol sistemi altına alabilmek için aşağıdaki komutu işletebilirsiniz.

git add .

Bu komut farklı parametler alabilmektedir fakat bu yazının amaçları arasında ayrıntılı bir anlatım olmadığı için bu detayları yazıda paylaşmayacağım, fakat öğrenmenizi tavsiye ederim.

Ardından sistemin şu anda neler yaptığını görmek için "git status" komutunu işletip durum ile ilgili bilgiyi gözden geçirebilirsiniz. Bu adım bir önceki komutun ne anlama geldiğini güzel bir şekilde ortaya koyacaktır.

git commit -m "mesajınız"

Yukarıda yer alan komut ile birlikte "git add ." ile işlenen dosyaları .git içerisindeki head bölümüne ekler. Bu işlem yerel makinemizde gerçekleşir. Uzak sunucuda herhangi bir değişikliğe neden olmaz.

Çift tırnak içerisinde yazılan commit mesajıdır. Örneğin bir projede nasıl değişiklikler yaptığınızı commit  mesajlar ile kayıt altında tutabilirsiniz.

Yerel makinemizde Git sistemini kullanımından bahsettik şimdi bu sistemi uzak sunucular ile birlikte nasıl kullanacağımızdan bahsedelim.

Projenizi uzak bir sunucuya göndermek için kullanılan servisler vardır. Bu servislerden başlıcaları GitLab, GitHub, Bitbucket denilebilir. Bu servisleri kullanmak istiyorsanız kullanıcı olarak servislere kayıt olmanız gerekmektedir.

Servislerin kullanımı ve arayüzleri oldukça sade ve kullanışlıdır. Bu nedenle kullanıcıların zorlanmadan bir repository oluşturabileceğini düşünüyorum. Projeninizi oluştururken bu projeyi başkalarının görüp göremeyeceğine dair ayarlamaları yapabilirsiniz.

Servisler aracılığı ile oluşturduğunuz depoyu projenizin bulunduğu dizinde kullanmak için eklemeniz gerekmektedir. Bu adımda aşağıdaki komutu kullanmalısınız. Burada ben örnek bir repository yolu ekledim siz kendinize ait repository yolunu eklemelisiniz.

git remote add origin git@gitlab.com:gkhnaryz/deneme.git

Bu komut ile birlikte depomuzda yaptığımız değişiklikleri nereye göndereceğimizi belirtmiş oluyoruz. Bu komut sonrasında tek yapmamız gereken proje dizinimizde yer alan dosyaları göndermek için komut vermek olacaktır.

git push -u origin master

komutu ile proje dizinimizdeki dosyaları uzak sunucuda yer alan depomuza gönderebiliriz.

Meşe Bilişim'de Software Testing dersi süresince geliştirdiğimiz her projeyi public şekilde Git repolarımızda yayınlayacağız. Temel seviyede Git sürüm versiyon kontrol sisteminden bahsetmek istedim. Bu yazının oldukça eksik olduğunu tekrar belirtmek isterim, okuyanlara tavsiyem mutlaka daha fazla merak ediniz ve Git resmi internet adresi olan git-scm.com adresini ziyaret ediniz.

Git sürüm versiyon kontrol sistemi hakkında çok daha doğru bir anlatımı www.git-scm.com adresinde bulabilirsiniz.

Git Komutları

git init  

git add . # değişen yada yeni oluşturulan dosyaları güncellenecekler listesine ekler.


git diff  #mevcut durum ile en son gerçekleştirilen güncelleme arasındaki farkları gösterir.

git status #gerçekleşen değişiklikleri listeler.

git log # güncelleme geçmişini gösterir.

git clone git@gitlab.com:gkhnaryz/deneme.git # bir depoyu klonlar.

git pull --rebase  # depodan son değişikleri alır.