2. Why Python?
Clear and Expressive Syntax
Indentasi harus rapi
Batteries Included
Bisa untuk Object Oriented ataupun Fungsional
3 Compiler Utama:
C (CPython)
Java (Jython)
Iron Python (.NET)
Python Installer Package (PIP) yang mudah digunakan
3. What are the Batteries?
Meskipun Bahasa pemrograman seharusnya tidak menjadi
batasan, namun jika menguasai satu Bahasa pemrograman
untuk semua kerjaan cukup menyenangkan juga.
Tersedia Library Python untuk:
Numerical Programming
Scientific Programming
Machine Learning Algorithm
Image Processing
Web Scrapping
Natural Language Processing
Web Development Framework
10. Django is …
Python Web Application Framework, for a perfectionist
with deadline
Ridiculously Fast
Fully Loaded
Reassuringly Secure
Exceedingly scalable
Incredibly Versatile
Yang udah make Django:
Disqus, Instagram, National Geographic, NASA, Pinterest,
OpenStack, The Guardian, The New York Times
12. MVC Should be…
Fat Model
Semua logika pengambilan data disentralkan di Model, jangan
ditaruh di Controller, apalagi View
Demi keseragaman data
Thin Controller
Hanya mengambil data dari request
Meneruskan ke model
Menampilkan hasil dari model
Dumb View
Cukup menampilkan data, minim sekali logic
14. Create Project
Set direktori Python dan Python->Scripts ke dalam default
path
Karena, kita akan, menggunakan command prompt untuk
membuat kerangka project
Setelah berhasil kita akan mendapatkan direktori Django
project seperti berikut:
> django-admin startproject BlogApp
BlogApp/
manage.py
BlogApp/
__init__.py
settings.py
urls.py
wsgi.py
15. Create App
Setiap project Django dapat memiliki beberapa App yang
berperan sebagai modul pada project tersebut.
Untuk membuat app, masuk ke dalam direktori project kita,
kemudian ketikkan perintah berikut
Agar dapat di-kenali oleh project, masukkan nama aplikasi
ke dalam settings.py
> python manage.py startapp blog
16. Add Models
Model adalah class untuk berinteraksi secara langsung
dengan basis data.
Django menyediakan class model dengan ORM yang
powerful dan mudah diintegrasikan. (IMHO: it’s even better
than Rails and Laravel)
Ada 3 model yang akan kita buat untuk latihan ini, yaitu
Article, Category, dan Comment
Category bisa memiliki banyak Article
Dan Article bisa memiliki banyak Komentar
Article di tulis oleh seorang User
Sedangkan penulis Category dan Comment tidak terhubung
dengan User
17. Model Scripts
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
title = models.CharField(max_length=50)
description = models.TextField(null=True, blank=True)
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
category = models.ForeignKey(Category)
author = models.ForeignKey(User)
class Comment(models.Model):
author = models.CharField(max_length=100)
content = models.TextField()
article = models.ForeignKey(Article, default=1)
18. Migrate & Run
Selesai merancang model, saatnya generate database script
sekalian database-nya
Ketikkan perintah berikut di shell:
Jalankan Django untuk melihat hasilnya
> python manage.py makemigrations
> python manage.py migrate
> python manage.py runserver
19. Basic Admin
Django menyediakan automatic admin page
Tidak seperti di Yii, Rails, atau Code Igniter yang hanya
menyediakan basic Scaffolding, admin page Django benar-
benar powerful
Mudah di-customize dan usable
Untuk dapat mengakses halaman admin, buatlah user
superadmin terlebih dahulu
Setelah menjalankan server kembali, halaman admin secara
default dapat diakses di:
localhost:8000/admin
> python manage.py createsuperuser
20. Admin Page untuk Model
Pada admin.py, ketikkan perintah python berikut:
from django.contrib import admin
from .models import Category, Article, Comment
class CategoryAdmin(admin.ModelAdmin):
list_display = ('title', 'description')
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'category', 'author')
class CommentAdmin(admin.ModelAdmin):
list_display = ('author', 'content', 'article')
admin.site.register(Category, CategoryAdmin)
admin.site.register(Article, ArticleAdmin)
admin.site.register(Comment, CommentAdmin)
21. Modifikasi Dikit
Agar semua perintah menjadi Bahasa Indonesia, ubah
pilihan Bahasa di settings.py dari “en-us” menjadi “id”
Agar kategori terlihat titlenya di admin Article, override
method __unicode__() pada model Category dan model
yang lain
Selanjutnya agar nama model familiar dengan Bahasa
Indonesia, tambahkan inner class Meta sebagai berikut
pada setiap model:
class Meta:
verbose_name = "Kategori"
verbose_name_plural = "List Kategori"
22. Inline Comment
Akan lebih bagus juga list komentar juga tampil di setiap
artikelnya. Caranya gunakan inline admin:
class CommentInline(admin.StackedInline):
model = Comment
extra = 1
class ArticleAdmin(admin.ModelAdmin):
...
inlines = [CommentInline]
23. Number of Comments
Ingin menampilkan informasi tambahan yang belum
termasuk dalam attribute, tambahkan saja method baru
pada modelnya.
Misalkan kita ingin menampilkan berapa banyak komentar
yang telah diberikan pada artikel tersebut.
class Article(models.Model):
...
def num_of_comments(self):
return self.comment_set.all().count()
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'category', 'author', 'num_of_comments')
inlines = [CommentInline]
24. Creator is Current User
Seharusnya kita tidak perlu menampilkan field penulis di
form artikel, dan penulisnya otomatis adalah user yang
sedang login.
Dus kita tidak perlu lagi inputan author
Dan kita perlu merubah sedikit aturan save di admin-nya:
class ArticleAdmin(admin.ModelAdmin):
...
fields = ['title', 'content', 'category']
def save_model(self, request, obj, form, change):
obj.author = request.user
obj.save()
25. Kustomisasi Lain
Menampilkan hanya artikel yang saya tulis
Menambahkan search
Menambahkan filter kategori
Membuat fungsi publish masal
Membuat field & inline readonly
Membuat recycle bin (plugin tambahan)
Dan banyak lagi
Dan banyak lagi
26. Use Different Admin UI
Tidak puas dengan desain tampilan admin, kita bisa
merubah sendiri dengan melakukan overriding template
asli.
Tapi kalau mau yang sudah ada, bisa nambah plugin juga sih
Django-Suit:
Django-wpadmin:
Tambahkan django.core.context_processors.request pada
‘template’ ‘context_processors’
> pip install django-suit
> pip install django-wpadmin
27. What to learn After
Templating
View (Function-based & Class-Based)
Form Validation
Model & Queries
Security
Internationalization
Performance
Plugins, plugins, plugins