Upload
fatih-erikli
View
2.512
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
Django"The web framework for
perfectionists with deadlines"
http://djangoproject.orghttp://django.org.tr
Fatih ERİKLİ
http://hipo.bizhttp://fatiherikli.comhttp://github.com/fatiherikli
Django Developer @hipo
Django Nedir?
Python üzerinde geliştirilen mümkün olduğunca az kod yazarak web uygulamaları geliştirmenizi sağlayan web framework'tür.
Neden Django?
● Python üzerinde çalışması
● DRY (Kendini tekrar etme!)
● Pluggable (tak çalıştır) uygulamalar
● Test edilebilirlik
● Çok iyi bir topluluk
Avantajları
● Built-in admin uygulaması
● ORM
● GEODjango
● Internationalization (i18n)
● ...
Kurulum
$ pip install django
Proje oluşturmak$ django-admin.py startproject helloworld
helloworld|-- helloworld| |-- __init__.py| |-- settings.py| |-- urls.py| `-- wsgi.py`-- manage.py
settings.py
Projenin ayarları bu dosyada yapılır.
● Veritabanı ayarları● Email ayarları● Kullanılacak uygulamalar
urls.py
Sitenin URL'leri bu dosyada belirlenir.
manage.py
Proje bu script üzerinden yönetilir.
Uygulamalar
Bir django projesi parça parça
uygulamalardan oluşur.
Uygulamalar
Bu uygulamalar genelde bir kısmı sizin
yazdıgınız, bir kısmını varsayılan olarak
gelenler, bir kısmı ise 3. parti
uygulamalardır.
Uygulama oluşturmak
python manage.py startapp blog
blog|-- __init__.py|-- models.py|-- tests.py`-- views.py
Uygulamanın yapısı
Bir uygulama
● Model
● View
● Template
öğelerinden oluşur.
Model
Uygulamanın veritabanı ile ilişkisi bu katmanda belirlenir. Her bir model veritabanındaki bir tablo ile eşleşir.
from django.db import models
class Category(models.Model):
"""
Holds category data
"""
name = models.CharField(max_length=255)
def __unicode__(self):
return self.name
class Post(models.Model):
"""
Holds blog post data
"""
title = models.CharField(max_length=255)
category = models.ManyToManyField(Category)
description = models.TextField(blank=True, null=True)
body = models.TextField()
def __unicode__(self):
return self.title
View
View'lar kullanıcının karşılandığı ve ona yanıt verildiği katmandır.
def show_post(request, post_id):
post = get_object_or_404(Post, id=post_id)
return render_to_response("post_detail.html", {
"post": post
})
class PostDetailView(DetailView):
model = Post
pk_url_kwarg = "post_id"
Function based view
Class based view
Template
Kullanıcıya verilecek olan yanıtın işlendiği bölümdür. Template'lar HTML sonuçlar üretmeyi kolaylaştırırlar.
Front-end developer'lar bunu çok sever.
<div class="post">
<h1>{{ post.title }}</h1>
<p>{{ post.body }}</p>
<ul>
{% for category in post.categories.all %}
<li>{{ category.name }}</li>
{% endfor %}
</ul>
</div>
HTML Template
Teşekkürler