CSS3 ile Zigzag şeklinde kenarlıklar oluşturma

Web tasarımda kullanılan kenarlıklar küçük ayrıntılardır ama yeri geldiğinde iyi kullanılırsa çok iyi sonuçlar elde edilebilir. Bunlardan örnek vermek gerekirse, Twitter’ın giriş sayfasındaki giriş alanlarına bakın. Kenarlık ne fazla belirgin ne de çok solgun ama hoş bir etki yaratıyor. İşte bu kenarlık tiplerinden birisi de zigzaglı kenarlık. Örneğini aşağıya inerek alt kısımda göreceğiniz şekilde zigzaglı kenarlık yapmak şu ana kadar CSS’yle mümkün değil gibi gözükse de CSS3′le mümkün. Bunu yapabilmek için gradientlerden yararlanıyoruz. Bir kare oluşturup 45 derece döndürürsek bir üçgen elde edebilir (kareyi ikiye katlayın).

Yukarıdan aşağıya zigzag kenarlık yapmak istiyorsanız şöyle bir class oluşturup kullanmanız gerekiyor.

.h-zigzag { /* Horizontal */
    background:
        linear-gradient(-135deg, #333538 5px, transparent 0) 0 5px,
        linear-gradient(135deg, #333538 5px, #fff 0) 0 5px;
    background-color: #333538;
    background-position: left bottom;
    background-repeat: repeat-x;
    background-size: 10px 10px;
}

Yatay olarak zigzaglı kenarlık yapmanız için gerekense şöyle bir class oluşturmak ve aynı şekilde onu da kullanmak.

.v-zigzag { /* Vertical */
    background:
        linear-gradient(45deg, #ec173a 5px, transparent 0) 0 5px,
        linear-gradient(135deg, #ec173a 5px, #fff 0) 0 5px;
        background-color: #ec173a;
        background-position: right top;
        background-repeat: repeat-y;
        background-size: 10px 10px;
}

Örneğini vereceğim blogta görebilirsiniz. Böylece hem resim kullanımını azaltıp sayfa yüklenme sürenizi kısaltırsınız, hem de sprite dosyası oluşturmanıza gerek kalmaz.

Kullanılması gereken bir teknoloji SASS

Web tasarımda çok en önemli bir yere sahip olan CSS’in geliştirilmişi olan bu teknoloji, daha kolay CSS kodu yazmanızı, kodlarınızda değişkenleri kullanabilmenizi, gereksiz CSS kodlarından kaçınmanızı sağlıyor. Bu teknolojiyle stil sayfaları fazla büyümeden kolayca işlem yapabiliyorsun. Kendiniz fonksiyon yazabiliyorsunuz ve bu fonksiyonları kullanabiliyorsunuz.  Bu teknolojiyi kullanmak için öncelikle SCSS standartlarına uygun olarak kodlarınızı yazmanız, ardından Ruby Gems’den birisi olan SASS ile derlemeniz gerekiyor. Derlenince normal CSS’ye dönüşüyor ve böylece kullanabiliyorsunuz.

SASS ile SCSS arasındaki farklardan söz etmek gerekirse SASS noktalı virgül gibi ögeler kaldırılarak daha kolay kullanmanız sağlanıyor. Fakat SASS kullanırken dikkat etmeniz gerekenlerden birisi de girintiler. Derleyici girintilere göre yorumluyor kodunuzu. Yani buna bakarak SASS, Python’dan etkilenmiştir diyebiliriz.

Etkilendikleri arasında CSS, YAML ve HAML bulunuyor. Bu dillerden etkilenen dil 2007 yılında ortaya çıktı. SASS çıktıktan sonra 2 dili etkileyecektir: LESS ve Stylus.

$blue: #3bbfce
$margin: 16px

.content-navigation
  border-color: $blue
  color: darken($blue, 9%)

.border
  padding: $margin/2
  margin:  $margin/2
  border-color: $blue

SCSS şekli de şöyle.

$blue: #3bbfce;
$margin: 16px;

.content-navigation {
  border-color: $blue;
  color:
    darken($blue, 9%);
}

.border {
  padding: $margin / 2;
  margin: $margin / 2;
  border-color: $blue;
}

SASS teknolojisi Ruby yüklü makinelerde kullanılabilir. Ruby Gems ile indirilip kurulduktan sonra derlemek için kullanılabilir. Bu teknolojinin bize en büyük faydası seri ve rahat kod yazmamız olacaktır. Çünkü bir başlık altında kural yazarken “&” ile hover ve benzeri pseudo sınıflarını kontrol edebiliriz. Yani şöyle yapabiliriz.

.makale{
    width: 100%;
    height: 80px;

    &:hover{

       width:65%;        

    }
}

Şeklinde yazdığımız betiğimiz şu şekilde derlenecektir.

.makale{
     width : 100%;
     height : 80px;
}

.makale:hover{
     width : 65%;
}

Sanırım Hint CSS en büyük örneklerden birisi olacaktır. Tamamen SCSS kullanılarak yapılan bu tooltip uygulaması herhangi bir Javascript kodu gerektirmeden çalışır. Hint CSS’ye ulaşmak için tıklayınız.

Kullanabilirseniz kesinlikle kullanmanızı öneriyorum. Hayatta en önemli şeyden yani zamanda tasarruf edip kodlamadan daha çok zevk alabileceksiniz. Daha fazla bilgi için SASS’ın sitesini ziyaret edebilirsiniz!

WordPress hızlandırmak için ufak etkili detaylar

WordPress kullanıcıların çoğu zaman şikayet ettiği şeylerden birisi de hız problemidir. Bu hız problemi hem sunucuyu yavaşlatır, hem de ziyaretçilere kötü bir deneyim sunar. Örneğin sayfaların geç yüklenmesi, bir yazı yazarken ‘timeout’ olması, aynı anda çok ziyaretçi alınca veritabanı sorunu gibi sorunlar WordPress blog sahiplerini rahatsız etmektedir. WordPress’i hızlandırmak istiyorsak, biraz ‘wp-xxx’ dosyalarının içine girmeli ve kodlarını incelemeliyiz. Çünkü bilmeden yaptığımız her şey blogumuzun göçmesine neden olabilmektedir.

 WP HAFIZA LİMİTİNİZİ ARTTIRIN

WordPress her şeyi düşünmüş ve paylaşımlı sunucular için de kendi hafıza limitini koymuş. Bu hafıza limiti, yani RAM, yapacağımız işlemlerde yetersiz kalmakta ve işlem yavaşlayabilmekte veya hiç çalışmamakta olabilir. Bu hafıza limitini hacklememiz için yapmamız gerekenlerden bahsetmek gerekirse, en iyi yöntem default-constants.php adlı dosyayı bulup içerisini düzenlemek olacaktır. 18. satırda başlayan bu betiği düzenlememiz gerekebilir.

	// set memory limits
	if ( !defined('WP_MEMORY_LIMIT') ) {
		if( is_multisite() ) {
			define('WP_MEMORY_LIMIT', '64M');
		} else {
			define('WP_MEMORY_LIMIT', '40M');
		}
	}

Burada WordPress’in ne kadar hafıza kullanacağını belirten bir tanımlama var. Eğer çoklu-blog ise 64M kullanıyor, değilse de 40M RAM kullanıyor. Ama normalde PHP için ayrılan varsayılan değer 128M’tır. Bu WordPress hack’ı için yapmamız gerekenler bu değerleri sunucumuza ve ihtiyaçlarımıza göre düzenlememizdir.

Veya bu dosyayı düzenlemek yerine wp-config.php dosyamızın uygun bir yerine

define('WP_MEMORY_LIMIT', '256M');

Satırını ekleyebiliriz. Ama eğer yukarıdaki yöntemi yapmıyorsanız ve kullanacağınız RAM miktarı 256M’tan fazla ise gene default-constants.php adlı dosyayı düzenlemeniz gerekecektir. Neden diye sorarsanız, yukarıdaki kod bloğunun hemen altında ise şöyle bir betik var.

	if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
		define( 'WP_MAX_MEMORY_LIMIT', '256M' );
	}

Burayı da düzenlemeyeyim, ben wp-config.php ‘den devam edeyim derseniz, şu kodu eklemeniz yeterli.

define( 'WP_MAX_MEMORY_LIMIT', '384M' );

RAM sorununu böyle çözebilirsiniz. Ama kendi aldığınız sunucunun özellikleri de önemlidir.

 Otomatik yazı taslaklarını kapatın

WordPress, yazınını birden fazla sürümünü kaydeder ve bu yazılar, sanki 5-10 yazı varmış gibi veritabanını şişirir. Normalde 300 yazı için 3 MB gibi bir rakam olabilecek veritabanı, 12-15 MB’a kadar çıkabilir. Eğer yazı sürümlerinin ne olduğunu bilmiyorsanız, eski yazılarınızda aşağıya indiğinizde eski yazı sürümlerini görebileceksiniz. İşte onlar POST_REVISIONS olarak isimlendirilen bir sabitle kapatılıp açılabiliyor. Yazı sürümlerini kapatmanız size veritabanından tasarruf sağlayacaktır.

define('WP_POST_REVISIONS', false);

 Yazılarınızı 10 dakikada kaydetmeye ayarlayın

Yazı yazarken WordPress, belli bir süre içerisinde yazınızı kaydeder. Bu yazının kaydedilme süresini ayarlayabilirsiniz. Bir yazı yazarken iki de bir kaydedilmesi pek hoş olmayacağı için bu süreyi arttırabiliriz. Saniye bazında arttırmak için aşağıyı düzenleyebilirsiniz.

define('AUTOSAVE_INTERVAL',600);  // 10 dakikada bir kaydeder

 Gereksiz sorgulardan kurtulun

Gereksiz sorgular derken aklımıza birçok şey geliyor. Sonuçta büyük bir sistem WordPress. Ama kendi yapacağımız temadaki birkaç düzenlemeyle bu sorunu halledebiliriz. Bunların başında, stil ve komut satırlarının çağrılması var. Normal bir temanın üst kısmı şu şekilde olur.

<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo('stylesheet_url'); ?>" />
<script type="text/javascript" src="<?php bloginfo('template_url');?>/ui/user-interface.js"></script>
<script type="text/javascript" src="<?php bloginfo('template_url');?>/ui/javascript.js"></script>

Eğer dikkat ederseniz, her seferinde bir sorgu çalışıyor ve template_url veritabanından çekiliyor. Ona göre de komut satırları ve stil dosyaları yükleniyor kullanıcıya. Bunu ne yapabiliriz diye sormanız gayet doğaldır. Önerim şu şekilde olandır.

<base href="http://www.kulturlupenguen.com/">

<link rel="stylesheet" type="text/css" media="all" href="wp-content/themes/penguenblog/style.css" />
<script type="text/javascript" src="wp-content/themes/penguenblog/ui/user-interface.js"></script>
<script type="text/javascript" src="wp-content/themes/penguenblog/ui/javascript.js"></script>

base elementi, bir web sitesinde dosyaların aranacağı alan adını tarayıcıya tanıtır. Eğer base kullanmadan yapsaydık, alt sayfalarda problem olacaktı ve stil ve komut dosyaları görünmeyecek, sitenin şaftı kayacaktı. Ayrıca burada 3 tane sorgudan kurtulmuş olduk. Yani 43 adet sorguyla ana sayfamız oluşuyorsa, 40 sorguya indi. Kendi temanız içerisinde bu tür küçük değişiklikler yapmalısınız.

 Kendi silahıyla WP’yi onarın

WordPress hacklerinden bir tanesi de veritabanını onarmadır. MyISAM olan veritabanı tabloları onarılıp, kontrol edilebilir. WordPress’i tamir etmenin yollarından biridir. Ayrıca ‘Bu yazıyı düzenlemeye yetkiniz yok.’ tarzında hatalar alıyorsanız, onararak düzeltebilirsiniz.

 define('WP_ALLOW_REPAIR', true);

Bu kodu wp-config.php dosyanıza ekledikten sonra onarma yapmak için girmeniz gereken adrese girin:

{blog_adresiniz}/wp-admin/maint/repair.php

WordPress veritabanını onarmaTamir et ve iyileştir dediğimizde, iyileştirmenin yapıldığında dair bir çıktı aldıysanız, tamamdır bu iş!

 Herkezin söylediği gibi EKLENTİLER!

Eklentisiz WordPress olmazsa olmazlardandır. Ama eklenti sayısını arttırmaya ve siteyi kasmaya gerek yok. Mesela ‘WordPress SEO by Yoast’ eklentisini kullanıyorsanız, ‘Google XML Sitemap’ eklentisine gerek yok. Yoast bu işi düşünmüş ve bu iş için de bir sitemap indeksi hazırlamış.

Cache eklentilerini kullanmanıza gerek yok. Eğer çok fazla trafik harcamıyorsanız kaldırmalısınız.

 SONUÇ

Yapacağınız işlemleri düşünerek yapmanız, sitenizin her zaman hızlı kalmasını sağlayacaktır. Bunların en başında temalarınız ve yüklediğiniz eklentiler gelmektedir. Bu eklentilerdeki ve temalardaki sorguları yukarıdaki gibi azaltırsanız, daha çok performans elde edersiniz. WordPress hızlandırmak size bağlı olan bir durumdur. Yani ne kadar hakimseniz o kadar hızlı kullanırsınız.

Django İlk Uygulamamızı Yazıyoruz – 2

Yönetim panelini etkinleştirmiştik. Şimdi küçük bir mikroblog uygulaması yapalım. Bu uygulamada eğer “The Social Network” filmini izlediyseniz, Mark’ın mikroblogu gibi bir şey yapacağız. Twitter’a benzer olan bu mikroblogda yapacağımız şey belli bir karakter limiti ile yazılar yazmak ve onları SEF Url’ler ile göstermek olacak. Şimdi projemizin dizinine geliyoruz. manage.py dosyasını görmeniz lazım. Öncelikle bir adet uygulama oluşturmamız gerek. Uygulama ve projeler arasındaki farka bakarsak uygulama projenin içinde olur ve bir işlem yapar, örneğin bloglar gibi. Ama proje bu uygulamaların bütünüdür. Mesela büyük bir teknoloji sitesi açtınız. Projenize forum ve blog da eklemek istiyorsunuz. İşte asıl site, forum ve blog bu projeye dahildir ama bu uygulamalar birer proje değildir.

Hemen şu komutu çalıştırarak bir adet uygulama oluşturalım:

python manage.py startapp mikroblog

Bu komuttan sonra projenizin dizininde “mikroblog” adında bir klasör oluşacaktır. Bu klasörün içeriğinde şu dosyaları görmeniz gerekiyor.

  • __init__.py
  • models.py
  • views.py
  • tests.py

Bu dosyaları gördüyseniz projenizi başarıyla oluşturdunuz. Şimdi models.py dosyasına girip aşağıdaki kodları yazın.

#-*- coding:utf-8 -*-
from django.db import models

# Create your models here.

from django.contrib.auth.models import User
from django.template.defaultfilters import slugify

class MikroManager(models.Manager):
    def live(self):
        return self.model.objects.filter(yayinlanmis=True)

class Mikro(models.Model):
    yayinlanma_tarihi = models.DateTimeField(auto_now_add=True, editable=False)
    guncelleme_tarihi = models.DateTimeField(auto_now=True, editable=False)
    baslik = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, blank=True, default='')
    icerik = models.TextField()

    yayinlanmis = models.BooleanField(default=True)
    yazar = models.ForeignKey(User, related_name='yazilar')
    objects = MikroManager()

    class Meta:
        ordering = ['-yayinlanma_tarihi','baslik'] # en yeniler her zaman üstte olacak

    def __unicode__(self):
        return self.baslik

    def save(self, *args, **kwargs):
        if not self.slug: #slug yoksa başlığı sluga çevirerek kullan
            self.slug = slugify(self.baslik)
        super(Mikro, self).save(*args, **kwargs)

    @models.permalink
    def get_absolute_url(self):
        return ('mikro:detail',(),{'slug':self.slug})

Modelimizi oluşturduk şimdi projemizin ana dosyasına girelim yani ilkProjem dizinine. INSTALLED_APPS değişkenine değer eklememiz gerekiyor. Şu şekilde yapmanız gerekiyor.

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    'django.contrib.admindocs',
    'mikroblog',
)

Bunu yaptıktan sonra manage.py dosyasını çalıştıracağız. Şu komutla tekrar çalıştırın.

python manage.py sql mikroblog

Komut satırında şöyle bir SQL komutu gördüyseniz uygulama kurulmuş demektir:

BEGIN;
CREATE TABLE `mikroblog_mikro` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `yayinlanma_tarihi` datetime NOT NULL,
    `guncelleme_tarihi` datetime NOT NULL,
    `baslik` varchar(255) NOT NULL,
    `slug` varchar(255) NOT NULL,
    `icerik` longtext NOT NULL,
    `yayinlanmis` bool NOT NULL,
    `yazar_id` integer NOT NULL
)
;
ALTER TABLE `mikroblog_mikro` ADD CONSTRAINT `yazar_id_refs_id_2c2ad8b2` FOREIGN
 KEY (`yazar_id`) REFERENCES `auth_user` (`id`);

COMMIT;

Son bir kere daha syncdb komutunu çalıştırıyoruz.

python manage.py syncdb

Şimdi biraz oynayalım. “manage.py” dosyasını gene çalıştırıp interaktif kabuğa gireceğiz.

python manage.py shell

Aşağıdakileri teker teker girin.

Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from mikroblog.models import Mikro
>>> from django.utils import timezone
>>> from django.contrib.auth.models import User
>>> yazar = User.objects.get(id=1)
>>> yazi = u'Şu an bunu okuyorsanız başarıyla kurdunuz demektir :) '
>>> tarih = timezone.now()
>>> baslik = u'Düşünme, yap!'
>>> n = Mikro(yayinlanma_tarihi=tarih, baslik=baslik, icerik=yazi, yayinlanmis=T
rue, yazar=yazar)
>>> n.save()
>>> Mikro.objects.all()
[<Mikro: D├╝┼ş├╝nme, yap!>]
>>> Mikro.objects.get(pk=1)
<Mikro: D├╝┼ş├╝nme, yap!>

Şimdi bir adet yazı oluşturmuş durumdayız. Veritabanımıza baktığımızda konsoldaki gibi Türkçe karakter problemi olmadan kayıt edildiğini görebiliriz.

Template Sistemi ve Yazıyı Gösterme

Gene projemizin settings.py dosyasını (ilkProjem/settings.py) açıp bir değişkeni daha düzenleyeceğiz. Bu değişken template dosyalarının barındığı klasör ismini depo ediyor. Şöyle değiştirin:

import os
import os.path
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]

Ardından aynı dizin içerisine bir “templates” dizini oluşturun. Onun içine de “mikroblog” dizini açın. Ardından article.html diye bir dosya oluşturun. Şimdilik bu işimiz bitti.

urls.py dosyası oluşturun

Bir urls.py dosyası oluşturun ama “mikroblog” dizini içerisinde olsun. O dosyayı açın ve şöyle düzenleyin.

from django.conf.urls import patterns, url
from . import views

urlpatterns = patterns('',
    url(r'^$', views.YaziListView.as_view(), name='list'),
    url(r'^(?P<slug>[\w-]+)/$', views.YaziDetailView.as_view(), name='detail'),
)

Bunu şimdi asıl URL ayarlarına eklememiz gerekiyor. Kökteki urls.py dosyasını açın ve şu şekilde düzenleyin.

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'ilkProjem.views.home', name='home'),
    # url(r'^ilkProjem/', include('ilkProjem.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
    url(r'^blog/', include('mikroblog.urls')), # işte uygulamamız bu url'den erişiliyor
)

Uygulamamız yavaş yavaş şekillenmeye başladı. Şimdi templates dizinine girin ve önceden oluşturduğumuz mikro_list.html dosyasını açın içerisine şu kodları girin. Tam bir tasarım değil ama bilgiyi şu anlık görebilmemiz için gerekli. Bu bizim yazdığımız yazıların gösterileceği sayfa. Yani anasayfa akışı da diyebiliriz.

{% load url from future %}
<h1>Yazılar</h1>

{% for mikro in object_list %}
    <li><a href="{% url 'detail' mikro.slug %}">{{ mikro.yayinlanma_tarihi|date }} - {{ mikro.baslik }}</a></li>
{% empty %}
    <li>Daha yazı yazılmamış. Lütfen yönetici panelinizden yazı yazın!.</li>
{% endfor %}

Bu süslü parantezler arasına istediğimiz çoğu şeyi yazabiliyoruz. Değişkenler, if ve while sorguları… İşte Django’yu sevmek için ayrı bir neden daha! Şimdi mikroblog klasöründeki views.py’yi açın ve aynen kopyalayın.

# Create your views here.

from django.views.generic import ListView, DetailView
from models import Mikro

class YayinlanmisYazilar(object):
    def get_queryset(self):
        return self.model.objects.live()

class YaziListView(YayinlanmisYazilar, ListView):
    model = Mikro

    def get_context_data(self, **kwargs):
        context = super(YaziListView, self).get_context_data(**kwargs)
        return context

Şimdi yazımızın detaylı olarak gösterileceği kısma girelim. mikro_list.html‘in bulunduğu dizinde bir de mikro_detail.html dosyası açın ve aşağıdakini içine yapıştırın.

{% load url from future %}
<h1>{{ object.baslik }}</h1>

<p>{{ object.icerik|linebreaks }}</p>

<strong>{{ object.yazar }} bu yazıyı {{object.yayinlanma_tarihi}} tarihinde yazdı.</strong>

<p>
<a href="{% url 'list' %}">Anasayfa</a>
</p>

Burada dikkat çekmek istediğim bir noktada var. anasayfa kısmına bakarsak, a elementinin href değeri “{% url ‘list’ %}” olarak ayarlanmış. Şimdi yukarıya çıkın ve mikroblog dizini içerisindeki urls.py’yi açın. Orada name=’list’ gözüne çarpacaktır. İşte anasayfanın URL’sini yazmış bulunuyoruz.

Tabi bu HTML Template’i render etmemiz için views.py’yi açıp sonuna şu sınıfı da eklemek gerekli.

class YaziDetailView(YayinlanmisYazilar, DetailView):
    model = Mikro

    def get_context_data(self, **kwargs):
        context = super(YaziDetailView, self).get_context_data(**kwargs)
        return context

Her şey tamam olduğuna göre Python Shell’ini açıp bir adet yazı ekleyelim. ilkProjem dizinindeyken şu komutu çalıştırıp…

python manage.py shell

… ardından şunları girmeniz yeterli:

Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from mikroblog.models import Mikro
>>> from django.utils import timezone
>>> from django.contrib.auth.models import User
>>> yazar = User.objects.get(id=1)
>>> yazi = u'Şu an bunu okuyorsanız başarıyla kurdunuz demektir :) '
>>> tarih = timezone.now()
>>> baslik = u'Düşünme, yap!'
>>> n = Mikro(yayinlanma_tarihi=tarih, baslik=baslik, icerik=yazi, yayinlanmis=T
rue, yazar=yazar)
>>> n.save()
>>> Mikro.objects.all()
[<Mikro: D├╝┼ş├╝nme, yap!>]
>>> Mikro.objects.get(pk=1)
<Mikro: D├╝┼ş├╝nme, yap!>

Girdikten sonra sunucumuzu çalıştırıyoruz (manage.py ile çalıştırabilirsiniz). Ardından aşağıdaki adrese giriyoruz:

http://127.0.0.1:8000/blog

İşte tamam!

Yazılar sayfası

Şimdi “Düşünme, yap!” başlığına tıklayıp yazdığımız yazıya bakalım.

Yazı içeriği

Sorun yok gibi gözüküyor. Ama hala eksiği bitmedi. Şimdilik bu kadar ama sonraki yazıyı da şiddetle okumanızı tavsiye ediyorum. Çünkü Django Admin Paneli entegresini yapacağız. Oradan yazı ekleyip silebileceğiz, yazıyı düzenleyebileceğiz ve yayınlanma durumunu kontrol edebileceğiz.

Django ilk uygulamamızı yazıyoruz – 1

Django’da ‘Merhaba Dünya!’ uygulamamızı yaptıktan sonra artık uygulama geliştirmeye başlayabiliriz. Ama ilk önce uygulamamızın yönetimi için Django’nun gelişmiş yönetim panelini etkinleştirmemiz gerekiyor. Yönetim panelini etkinleştirdikten sonra Twitter benzeri bir uygulama yapabiliriz. Ardından template sistemini kullanarak yaptığımız uygulamayı webe aktaracağız. Django’nun veritabanı ayarını yapabilmek için bir veritabanı sunucusu kurmamız lazım. Django ile en iyisi PostgreSQL. Ama MySQL de kullanılabilir. İkisi içerisinde ayarlamalar aynı denilebilir.

Şimdi projemizin ilkProjem/settings.py dosyasını düzenlememiz gerekiyor. Dosyayı açtıktan sonra şu kısmı düzenlememiz gerekiyor.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '',                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': '',
        'PASSWORD': '',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}
  • Django 4 adet veritabanı tipi destekliyor. Bunlar PostgreSQL, MySQL, Sqlite ve Oracle. ENGINEdeğerinin sonuna kullanmak istediğiniz uygulama için veritabanı tipini yazacaksınız. Biz MySql kullandığımız için ‘mysql’ ekledik.
  • NAME kısmı veritabanı adı. Oluşturduğunuz veritabanı adını girin.
  • USER ve PASSWORD için kullanıcı adı ve şifrenizi girin.
  • HOST için şu değeri girin: 127.0.0.1 . Bu veritabanını bulunduğu sunucu adresi. Yani yerel makine.
  • PORT’u boş bırakabilirsiniz.

Bunları yaptıktan sonra şuna benzer bir görüntü elde edeceğiz.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'ilkProjem',                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}

Ardından Windows için MySQLdb eklentisini kurmamız gerekiyor. Bu adresten Windows kurucusunu indirip kurduktan sonra INSTALLED_APPS değişkenine gelip aşağıdakileri ‘uncomment’ etmeniz gerekiyor. Yani önündeki ‘#’ işaretini kaldırmanız gerek.

  • django.contrib.admin
  • django.contrib.admindocs

Şimdi ilkProjem/urls.py dosyasını açın ve şu şekilde düzenleyin.

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'ilkProjem.views.home', name='home'),
    # url(r'^ilkProjem/', include('ilkProjem.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
)

Bu da tamamlandığına göre her şey hazır demektir. Şimdi komut satırını açıp, projemizin dizinine geçmek gerekiyor. Ben masaüstümdeki Django dizinine kurmuştum projeyi. Şimdi oraya geçip şu komutu yazmam gerekecek.

cd Desktop
cd Django
cd ilkProjem
python manage.py syncdb

Bunu yazdıktan sonra tabloların oluşturulduğuna dair mesajlar alacaksınız ve ardından SuperUser oluşturmanız için bilgilerinizi isteyecek. O bilgileri yazdıktan sonra yönetici paneline girebileceksiniz. İşte ekran görüntüsü.
Syncdb komutundan sonraki ekran görüntüsüArtık yönetici panelinize giriş yapabileceksiniz. Konsolda oluşturduğunuz süper kullanıcı ile giriş yapıyorsunuz. Şimdi sunucuyu çalıştırmak için şu komutu yazalım: python manage.py runserver

Ardından giriş yapmak için şu adrese gitmeniz yeterlidir: http://127.0.0.1:8000/admin/

Django Admin PaneliYönetim için dökümantasyonu açmak için Python docutils modülünü yüklememiz gerek. Onu buradan indirebilirsiniz. İndirdikten sonra bilgisayarınızın düzenli olması namına Python’ın kendi dizini içerisine komple çıkartıp, ardından install.py’yi çift tıkla çalıştırırsanız kurulacaktır. Sonra Django’yu yeniden başlatmamız gerekiyor. Bunun için de CTRL+C ile sunucuyu kapatıp önceki komutu tekrarlamanız yeterli. Artık dökümantasyon da kullanıma hazır.

Şu anlık Türkçe değil ama işimizi görürNe yazık ki şu anlık Türkçe’ye çevrilmemiş vaziyette. Ama burada çoğu fonksiyonu ve template sistemini öğrenebilirsiniz. Anasayfadan yeni kullanıcılar ekleyebilir ve gruplar oluşturabilirsiniz. Bunun dışında sitelerinizi de kontrol edebilirsiniz.

Djangoya giriş ve windows kurulumu

Temmuz ayının sıcak günlerinde beynimin pişmesiyle beraber laflarımın çoğunu Python ve Django oluşturmaya başladı. Django demeye başlayınca çevrem “Django da ne yaaaaa” demeye başladı. Django’yu Google’da olduğu gibi aratırsanız film adı çıkıyor. Ama bu değil. Django’nun ne olduğunu, bize neler getirdiğini, avantajlarını ve en önemlisi nasıl kurulacağını anlatacağım. Eğer bir terslik de çıkmazsa Django ile ilgili yazılarımı yazacağım ve püf noktalarını anlatacağım. Django için en genel tanım bir web framework’udur.

Django Web Framework

Django bir web framework’üdür ve Python dili ile yazılmıştır. Açık kaynak olarak dağıtılmaktadır ve geliştirilmektedir. Python altyapısını kullanır. MVC yapısını kullanır.

Kendine özgü template sistemiyle dinamik sitelerinizi rahatlıkla oluşturabilirsiniz. Oldukça gelişmiş bir URL yapısı vardır ki 5 dakikada sadece urls.py dosyasını düzenleyerek SEF linkler yaratabilirsiniz. Ayrıca hem sunucuyla etkileşim, hem de web yazılımı yapmak istiyorsanız gayet etkili bir yapısı var. Python’ın masaüstü yazılım gücüyle Django’nun webdeki gücünü birleştirerek oldukça güzel uygulamalar yapılabilir.

Ayrıca hızlı çalışır ve kaynak sıkıntısı çekmezsiniz. Az kaynağa sahip sunucularda bile gayet performanslı çalışır.

İlk olarak Django’nun son sürümünü indirmemiz gerekiyor. Django’yu bu sayfadan indirdikten sonra Python kurmamız gerek. Django’yu indirdiyseniz, arşiv dosyasını ben C: klasörüne açtım. İstediğiniz bir yere açın. Şimdi Python kurmamız gerekiyor. Python’ın 3.x.x sürümlerine tam olarak hakim olamadığım için ben 2.x.x sürümlerini indiriyorum. Bu sayfadan Python’ı indirdikten sonra ortam değişkenlerinden ‘Path’ değişkenine Python yolunu eklememiz gerekiyor.

Python’ı ben C:\Python27 klasörüne kurdum. Sürümüm 2.7 olduğu için böyle bir ad aldı. Şimdi komut satırından ‘python’ı çalıştırmak için ortam değişkenlerini düzenlememiz gerekiyor.

Python CMD

Gördüğümüz gibi ‘python’ yazınca uygulamayı çalıştıramıyoruz. Çalıştırmak için ortam değişkenlerini düzenlememiz gerek. Windows 8 kullanırken aramadan ‘ortam değişkenleri’ diye aratırsanız, 2 adet sonuç alırsınız. Siz sistem ortam değişkenlerini düzenleyeceksiniz. Şimdi ‘Path’ isimli değişkeni seçin ve düzenleye tıklayın. Ardından Python’ı nereye kurduysanız o klasörün yolunu belirtmemiz gerekecek yani şöyle.

Python PathKaydettikten sonra konsolda ‘python’ yazıp çalıştırabiliriz.

Düzgün şekilde çalışıyorŞimsi Django’yu çıkarttığımız dizine gidip Django’yu kurabiliriz. Django’yu indirmiştik ve bir dizine açmıştık. Ben Django’yu C:\Django-1.5.1 dizinine kurdum. Şimdi o dizinin içine cd komutu ile giriyorum. Ardından şu komutu yolluyorum.

python setup.py install

Django kurulmaya başlayacaktır. Konsolumuz bir yığın şeyle dolacaktır. Şimdi ilk projemizi yaratmamız için Django’yu kurduğumuz dizin içerisinden django-admin.py dosyasını bulmalıyız. Onu bulduktan sonra masaüstüne veya herhangi bir müsait yere atıp oradan çalıştıracağız. Gene ben bu dosyayı bulup C:\Users\user\Desktop\Django\ dizinine attım. Bu dizinden çalıştırıyorum. Şimdi ilk projemizi oluşturalım. django-admin.py dosyasını çalıştıracağız.

django-admin.py startproject ilkProjem

Eğer konsol ekranında bir şey görünmüyorsa ve django-admin.py’nin bulunduğu dizinde ilkProjem diye bir klasör oluştuysa başarıyla Django’da proje oluşturdunuz demektir. Klasörün içine girdiğinizde karşınıza manage.py dosyası çıkacaktır ve proje adıyla bir klasör daha. Şimdi ilk projemizi çalıştıralım ve Python’dan biraz yararlanalım. Gelecek yazılarımızda ise nasıl ‘Merhaba Dünya!’ diyeceğimizi ve SEF Url sistemini yapacağız. Oluşturduğunuz projeyi çalıştırmak için yapmanız gereken django-admin.py dosyasının bulunduğu dizinden, oluşturduğunuz projenin bulunduğu dizine geçmek. Yani sırasıyla yapmanız gerekenler:

cd ilkProjem

python manage.py runserver

Bu komutları da yazdığınızda karşınızda şöyle bir çıktı olacaktır.

Validating models...

0 errors found
July 12, 2013 - 22:16:23
Django version 1.5.1, using settings 'ilkProjem.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

Şimdi http://127.0.0.1:8000 adresine giriyoruz …

[12/Jul/2013 22:19:07] "GET / HTTP/1.1" 200 1960

… sonuç başarılı projemiz çalışıyor. Dikkat ederseniz konsolda isteklerin gelişini de görebilirsiniz.

Tebrikler, Django’yu başarıyla kurdunuz ve ilk projenizi yaptınız!