SlideShare a Scribd company logo
1 of 28
Python
WEB DEVELOPMENT FRAMEWORK
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
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
Python for Scientific
Machine Learning
Web Scrapping
Python NLTK
Web Development
Django
DEEP INTRODUCTION TO THE FRAMEWORK
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
Fully Loaded with….
 MVC  MTV (Model, Template, View)
 Object Relational Mapper
 Automatic Admin Interface
 Robust Template
 Internationalization
 Caching
 Validation & CSRF Protection
 GeoDjango
 Etc, etc, etc ……..
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
Instalasi Django
 Online Connected Computer
 Install Python
 Install PIP
 Stand Alone Computer
 Install Python
 Download Django Package
 Install Package
 Verify Installation
> pip install Django
> import Django
> print(django.get_version())
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
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
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
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)
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
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
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)
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"
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]
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]
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()
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
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
What to learn After
 Templating
 View (Function-based & Class-Based)
 Form Validation
 Model & Queries
 Security
 Internationalization
 Performance
 Plugins, plugins, plugins
Last Words

More Related Content

What's hot

Makalah: Semantic Web
Makalah: Semantic WebMakalah: Semantic Web
Makalah: Semantic WebBachrul Ilmi
 
Spring Certification Questions
Spring Certification QuestionsSpring Certification Questions
Spring Certification QuestionsSpringMockExams
 
Kotlin for Android Development
Kotlin for Android DevelopmentKotlin for Android Development
Kotlin for Android DevelopmentSpeck&Tech
 
Pemrograman Web 5 - Javascript
Pemrograman Web 5 - JavascriptPemrograman Web 5 - Javascript
Pemrograman Web 5 - JavascriptNur Fadli Utomo
 
Algoritma dan Struktur Data (Python) - Struktur I/O
Algoritma dan Struktur Data (Python) - Struktur I/OAlgoritma dan Struktur Data (Python) - Struktur I/O
Algoritma dan Struktur Data (Python) - Struktur I/OAndiNurkholis1
 
Introduction to Spring's Dependency Injection
Introduction to Spring's Dependency InjectionIntroduction to Spring's Dependency Injection
Introduction to Spring's Dependency InjectionRichard Paul
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentationguest11106b
 
REST Easy with Django-Rest-Framework
REST Easy with Django-Rest-FrameworkREST Easy with Django-Rest-Framework
REST Easy with Django-Rest-FrameworkMarcel Chastain
 
Makalah sistem-operasi
Makalah sistem-operasiMakalah sistem-operasi
Makalah sistem-operasiIKHSAN MAHRURI
 
Handle Exceptions in Selenium Webdriver | Edureka
Handle Exceptions in Selenium Webdriver | EdurekaHandle Exceptions in Selenium Webdriver | Edureka
Handle Exceptions in Selenium Webdriver | EdurekaEdureka!
 
Angular 7 Firebase5 CRUD Operations with Reactive Forms
Angular 7 Firebase5 CRUD Operations with Reactive FormsAngular 7 Firebase5 CRUD Operations with Reactive Forms
Angular 7 Firebase5 CRUD Operations with Reactive FormsDigamber Singh
 
Materi konversi bilangan
Materi konversi bilanganMateri konversi bilangan
Materi konversi bilanganndriehs
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot IntroductionJeevesh Pandey
 
Spring boot
Spring bootSpring boot
Spring bootsdeeg
 
Angular js routing options
Angular js routing optionsAngular js routing options
Angular js routing optionsNir Kaufman
 

What's hot (20)

Makalah: Semantic Web
Makalah: Semantic WebMakalah: Semantic Web
Makalah: Semantic Web
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
Spring Certification Questions
Spring Certification QuestionsSpring Certification Questions
Spring Certification Questions
 
Kotlin for Android Development
Kotlin for Android DevelopmentKotlin for Android Development
Kotlin for Android Development
 
Pemrograman Web 5 - Javascript
Pemrograman Web 5 - JavascriptPemrograman Web 5 - Javascript
Pemrograman Web 5 - Javascript
 
Algoritma dan Struktur Data (Python) - Struktur I/O
Algoritma dan Struktur Data (Python) - Struktur I/OAlgoritma dan Struktur Data (Python) - Struktur I/O
Algoritma dan Struktur Data (Python) - Struktur I/O
 
Introduction to Spring's Dependency Injection
Introduction to Spring's Dependency InjectionIntroduction to Spring's Dependency Injection
Introduction to Spring's Dependency Injection
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentation
 
REST Easy with Django-Rest-Framework
REST Easy with Django-Rest-FrameworkREST Easy with Django-Rest-Framework
REST Easy with Django-Rest-Framework
 
Pengenalan Java Swing
Pengenalan Java SwingPengenalan Java Swing
Pengenalan Java Swing
 
Jdbc
JdbcJdbc
Jdbc
 
Makalah sistem-operasi
Makalah sistem-operasiMakalah sistem-operasi
Makalah sistem-operasi
 
Handle Exceptions in Selenium Webdriver | Edureka
Handle Exceptions in Selenium Webdriver | EdurekaHandle Exceptions in Selenium Webdriver | Edureka
Handle Exceptions in Selenium Webdriver | Edureka
 
Angular 7 Firebase5 CRUD Operations with Reactive Forms
Angular 7 Firebase5 CRUD Operations with Reactive FormsAngular 7 Firebase5 CRUD Operations with Reactive Forms
Angular 7 Firebase5 CRUD Operations with Reactive Forms
 
Materi konversi bilangan
Materi konversi bilanganMateri konversi bilangan
Materi konversi bilangan
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
 
Spring boot
Spring bootSpring boot
Spring boot
 
Angular js routing options
Angular js routing optionsAngular js routing options
Angular js routing options
 
Joy of scala
Joy of scalaJoy of scala
Joy of scala
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 

Viewers also liked

Python geek Event Description
Python geek Event DescriptionPython geek Event Description
Python geek Event DescriptionParbhat Puri
 
2010.1 mandriva linux_installation_using_dual_cd
2010.1 mandriva linux_installation_using_dual_cd2010.1 mandriva linux_installation_using_dual_cd
2010.1 mandriva linux_installation_using_dual_cdSt Louis MUG
 
2010-02-09 Reactor Pattern & Event Driven Programming
2010-02-09 Reactor Pattern & Event Driven Programming2010-02-09 Reactor Pattern & Event Driven Programming
2010-02-09 Reactor Pattern & Event Driven ProgrammingLin Jen-Shin
 
Python in Computer Vision
Python in Computer VisionPython in Computer Vision
Python in Computer VisionBrian Thorne
 
Python PPT
Python PPTPython PPT
Python PPTEdureka!
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great InfographicsSlideShare
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShareKapost
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareEmpowered Presentations
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation OptimizationOneupweb
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingContent Marketing Institute
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksSlideShare
 

Viewers also liked (15)

OASIS
OASISOASIS
OASIS
 
Python geek Event Description
Python geek Event DescriptionPython geek Event Description
Python geek Event Description
 
2010.1 mandriva linux_installation_using_dual_cd
2010.1 mandriva linux_installation_using_dual_cd2010.1 mandriva linux_installation_using_dual_cd
2010.1 mandriva linux_installation_using_dual_cd
 
Anyevent
AnyeventAnyevent
Anyevent
 
2010-02-09 Reactor Pattern & Event Driven Programming
2010-02-09 Reactor Pattern & Event Driven Programming2010-02-09 Reactor Pattern & Event Driven Programming
2010-02-09 Reactor Pattern & Event Driven Programming
 
Python in Computer Vision
Python in Computer VisionPython in Computer Vision
Python in Computer Vision
 
Python PPT
Python PPTPython PPT
Python PPT
 
An Introduction to Python Concurrency
An Introduction to Python ConcurrencyAn Introduction to Python Concurrency
An Introduction to Python Concurrency
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShare
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
 
You Suck At PowerPoint!
You Suck At PowerPoint!You Suck At PowerPoint!
You Suck At PowerPoint!
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 

Similar to Django Mini Tutorial

Tutorial Aplikasi android client server menggunakan REST API Django
Tutorial Aplikasi android client server menggunakan REST API DjangoTutorial Aplikasi android client server menggunakan REST API Django
Tutorial Aplikasi android client server menggunakan REST API DjangoAbdul Aziz Subayu
 
Resume aplinet oop mvc
Resume aplinet oop mvcResume aplinet oop mvc
Resume aplinet oop mvcSam_Azzam
 
Slide struktur codeigneter
Slide struktur codeigneterSlide struktur codeigneter
Slide struktur codeigneterCecilia Cintahta
 
analisis data tikus percobaan materi informatika kelas X.pptx
analisis data tikus percobaan materi informatika kelas X.pptxanalisis data tikus percobaan materi informatika kelas X.pptx
analisis data tikus percobaan materi informatika kelas X.pptxrulimustiyawan37
 
Tugas 4 debbie mistikaweni 1412510982
Tugas 4 debbie mistikaweni   1412510982Tugas 4 debbie mistikaweni   1412510982
Tugas 4 debbie mistikaweni 1412510982debbie95
 
Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045Sugeng Nirwoto
 
Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045Sugeng Nirwoto
 
Modul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objekModul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objekimam arifin
 
Codeigniter lanjut helper dan library
Codeigniter lanjut helper dan libraryCodeigniter lanjut helper dan library
Codeigniter lanjut helper dan libraryboys of separato
 
0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptxBom Bom
 
Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316septianarul
 
Modul pelatihan-django-dasar-possupi-v1
Modul pelatihan-django-dasar-possupi-v1Modul pelatihan-django-dasar-possupi-v1
Modul pelatihan-django-dasar-possupi-v1Ridwan Fadjar
 
Tutorial ci
Tutorial ciTutorial ci
Tutorial ciWira Hul
 
Resa ari siswo[1210652011], rico nilar hartono[1210652008]
Resa ari siswo[1210652011], rico nilar hartono[1210652008]Resa ari siswo[1210652011], rico nilar hartono[1210652008]
Resa ari siswo[1210652011], rico nilar hartono[1210652008]resaarisiswo
 
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONTutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONDimas Prawira
 
Jamal aplikasicrud
Jamal aplikasicrudJamal aplikasicrud
Jamal aplikasicrudmales Aja
 
Tugas 3 – 0317 (individu)
Tugas 3 – 0317 (individu)Tugas 3 – 0317 (individu)
Tugas 3 – 0317 (individu)Linda Lestari
 

Similar to Django Mini Tutorial (20)

Tutorial Aplikasi android client server menggunakan REST API Django
Tutorial Aplikasi android client server menggunakan REST API DjangoTutorial Aplikasi android client server menggunakan REST API Django
Tutorial Aplikasi android client server menggunakan REST API Django
 
Resume aplinet oop mvc
Resume aplinet oop mvcResume aplinet oop mvc
Resume aplinet oop mvc
 
Makalah java
Makalah javaMakalah java
Makalah java
 
Slide struktur codeigneter
Slide struktur codeigneterSlide struktur codeigneter
Slide struktur codeigneter
 
analisis data tikus percobaan materi informatika kelas X.pptx
analisis data tikus percobaan materi informatika kelas X.pptxanalisis data tikus percobaan materi informatika kelas X.pptx
analisis data tikus percobaan materi informatika kelas X.pptx
 
Tugas 4 debbie mistikaweni 1412510982
Tugas 4 debbie mistikaweni   1412510982Tugas 4 debbie mistikaweni   1412510982
Tugas 4 debbie mistikaweni 1412510982
 
Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045
 
Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045
 
Modul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objekModul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objek
 
Codeigniter lanjut helper dan library
Codeigniter lanjut helper dan libraryCodeigniter lanjut helper dan library
Codeigniter lanjut helper dan library
 
0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx
 
Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316
 
Modul pelatihan-django-dasar-possupi-v1
Modul pelatihan-django-dasar-possupi-v1Modul pelatihan-django-dasar-possupi-v1
Modul pelatihan-django-dasar-possupi-v1
 
Resume aplinet
Resume aplinetResume aplinet
Resume aplinet
 
Tutorial ci
Tutorial ciTutorial ci
Tutorial ci
 
Resa ari siswo[1210652011], rico nilar hartono[1210652008]
Resa ari siswo[1210652011], rico nilar hartono[1210652008]Resa ari siswo[1210652011], rico nilar hartono[1210652008]
Resa ari siswo[1210652011], rico nilar hartono[1210652008]
 
PBO Pratikum 1
PBO Pratikum 1PBO Pratikum 1
PBO Pratikum 1
 
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONTutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
 
Jamal aplikasicrud
Jamal aplikasicrudJamal aplikasicrud
Jamal aplikasicrud
 
Tugas 3 – 0317 (individu)
Tugas 3 – 0317 (individu)Tugas 3 – 0317 (individu)
Tugas 3 – 0317 (individu)
 

Django Mini Tutorial

  • 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
  • 11. Fully Loaded with….  MVC  MTV (Model, Template, View)  Object Relational Mapper  Automatic Admin Interface  Robust Template  Internationalization  Caching  Validation & CSRF Protection  GeoDjango  Etc, etc, etc ……..
  • 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
  • 13. Instalasi Django  Online Connected Computer  Install Python  Install PIP  Stand Alone Computer  Install Python  Download Django Package  Install Package  Verify Installation > pip install Django > import Django > print(django.get_version())
  • 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