Django Admin Paneli Ve Ayarlar

Bir onceki yazımda ilk projemizi başlatıp Django'ya kısa bir giriş yapmıştık.Şimdi de modellere geçmeden hemen once admin panelimizi kurup settings.py dosyamız içinde ufak ayarlar yapacağız.Bu yazıdan hemen sonra da Django'da modellere giriş yapacağız.Modeller konusunu yeniden yazmak yerine HDBlog'un kodlarından anlatarak devam edeceğim.Boylelikle elimizde canlı bir ornekte olmuş olacak.

Şimdi oncelikle bir onceki yazımda oluşturduğumuz django projesinin içine giriyoruz ve ilk uygulamamızı oluşturuyoruz.Django'da uygulama oluşturmak için aşağıdaki komutu kullanmanız yeterli olacaktır.

python manage.py startapp blogdeneme

Yukarıdaki komut ile blogdeneme adında bir uygulama oluşturuyoruz.Bu uygulamanın klasorune girdiğinizde init.py,models.py,tests.py,views.py dosyalarını gormeniz gerekecektir.Eğer gorduyseniz başarıyla yeni uygulama oluşturdunuz demektir.

Proje dizinimizdeki(ben djangoders adında proje oluşturdum) settings.py dosyasını açarsanız aşağıdaki gibi bir goruntuyle karşılaşacaksınız.Bu dosyaya veritabanı bilgilerinden media ve statik dosyalarımızın yerlerine kadar birçok onemli bilgiyi giriyoruz.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'America/Chicago'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = ''

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = '+&^m#c0z7vb7#n@tca3fq(13u1)#b-6(=p=r=yu!a)-@5(4kx$'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'djangoders.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'djangoders.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

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',
)

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

Burada en başta yer alan DEBUG satırı Django bir hata ile karşılaştığında ekrana hata ile ilgili teknik detayları mı basmasını yoksa hata sayfasını mı basmasına karar verir.Sitenizi deploy aşamasına gelene kadar TRUE olarak kullanırsanız daha yararlı olur.Çunku başlarda çok fazla hata yapacaksınız.Bu hatanın kaynağını bu hata sayfalarından oğrenmeniz gerekecek.İlerleyen zamanlarda deploy aşamasına geldiğinizde FALSE değerini vermeniz guvenlik açısından gerekli olacak.

Bir alt satırda yer alan ADMINS satırı adı ustune site yoneticilerinin bilgilerini içeriyor.Eğer çok fazla admin olursa bir alt satıra inip eklemeye devam edebilirsiniz.

DATABASES satırı onemli bir satırdır.Çunku buraya veritabanı bilgilerimizi gireceğiz.Başlangıç için sqlite idealdir.Bu yuzden sizde sqlite kullanın.ENGINE kısmına django.db.backends.sqlite3 yazarsak sqlite kullanacağımızı Djangoya bildirmiş oluruz.Bir altında yer alan NAME satırına herhangi bir isim verebilirsiniz.Bu sizin ana klasorunuze oluşturulacak olan veritabanının adı olacak.Sqlite kullanmak için bu iki kısmı doldurmanız yeterli olacaktır.Diğer veritabanları için USER ve PASSWORD bolumlerini de doldurmanız lazım.

TIME_ZONE yerine Europe/Istanbul , LANGUAGE_CODE yerine de tr-TR yazmanız Django'nun dilinin Turkçe olacağına karar vermeniz anlamına gelir.

MEDIA_ROOT ile belirtiler yere medya dosyalarımızın bulunacağı dizini yazıyoruz.(Windows kullanıcıları \ yerine \ kullanması gerekmekte.Linux kullanıcıları direk olarak kullanabilirler.)

MEDIA_URL ile yukarıda belirttiğimiz medya dizinine hangi URL ile ulaşacağımızı kararlaştırırız.

STATIC_ROOT ve STATIC_URL de aynı medya dosyalarımız gibidir.

TEMPLATE_DIRS ile kullanacağımız temanın dizinini belirtiyoruz.(Windows kullanıcıları yukarıda yazdığım uyarıyı dikkate almaya burada da devam etmelidirler.)

Geldik projemize ekleyeceğimiz uygulamalara.Django'nun en guzel yanlarından birisi de birden fazla uygulamayı bir projede çalıştırma imkanı vermesi. INSTALLED_APPS içine blogdeneme adlı az once oluşturduğumuz uygulamayı ekleyelim.Bu kısımda birde dikkat etmemiz gereken bir olay var.Djangoda eğer admin paneli kullanacaksak django.contrib.admin uygulamasının başındaki # sembolunu kaldıralım.Daha sonra admin panelimize direk /admin/ yazıp ulaşmak içinde djangoders/urls.py dosyası içindeki from django.contrib import admin , admin.autodiscover() ve url(r'^admin/', include(admin.site.urls)), satırlarının başındaki # sembolunu kaldıralım.Bu şekilde yapınca admin panelimizi aktif etmiş oluyoruz.

Settings.py ve admin panelimiz için yapacaklarımız bu kadar.Yukarıdakileri yaptıktan sonra yeni settings.py dosyamız aşağıdaki gibi olacak.Değişen yerlere dikkat edelim.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'veritabani.db',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'Europe/Istanbul'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'tr-TR'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = 'C:\Users\DELL\Desktop\djangoders\\media'

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = '/media/'

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    "C:\Users\DELL\Desktop\djangoders\static",
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = '+&^m#c0z7vb7#n@tca3fq(13u1)#b-6(=p=r=yu!a)-@5(4kx$'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'djangoders.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'djangoders.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

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',
    'blogdeneme',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

Ve daha sonra projemizin dizinine geçiyoruz ve veritabanı tablolarımızın oluşturulması için aşağıdaki komutu giriyoruz.

python manage.py syncdb

Bu komutu girdikten sonra super kullanıcı oluşturmak isteyip istemediğinizi soracak. Ve sizden mail adresi ile şifre alacak.Bu bilgileri admin paneline girmek için kullanacağız.

Django Admin Panel

Şimdi uygulamamızı çalıştıralım.Aşağıdaki komuttan sonra port numarası girerek istediğiniz bir portta açabilirsiniz.Eğer belirtmezseniz default olarak 8000 açılacaktır.

python manage.py runserver

Ekranda 0 errors found yazısını gorurseniz uygulamamız başarıyla çalıştırıldı demektir.Şimdi localhost:8000 adresimize girip 404 hatasını alalım.Bu hatayı alma sebebimiz index urlsini henuz tanımlamadığımızdır.Sadece admin urlsini tanımladık.

Django 404

Şimdi de /admin urlsine gidelim ve admin paneline giriş yapalım.

Django Admin Panel Giris

Eğer başarıyla giriş yaparsanız aşağıdaki gibi bir ekran goreceksiniz.

Django Admin Panel Dashboard

Bence bir sonraki yazımız olan Modellere kadar admin panelini iyice kurcalayın.Sitelerden yeni siteler ekleyip duzenleyin.Yeni guruplar kullanıcılar açın.Profilinizi doldurun.En azından eliniz ve gozunuz panele alışsın.Bir sonraki yazıda goruşmek uzere.

comments powered by Disqus