Anda di halaman 1dari 105

Modul Bahan Ajar 3 Hari Python Web Development

Oleh: Boby Siswanto


Outlines
Pertemuan Ke-1
Installing Basic Software
Python Basic
Web Server Gateway Interface (WSGI)
Django

Pertemuan Ke-2
Struktur Django
Django Model
Django View
Django Template
Memulai Membuat Aplikasi Web dengan Django

Pretemuan Ke-3
Membuat Model dan Aplikasi Perpustakaan
Django Admin
Membuat Home Page
Membuat Halaman List Buku
Membuat Halaman untuk Author
Pertemuan Ke-1
Installing Basic Software
Web Server Gateway Interface (WSGI)
Python Basic
Installing basic software
Python 3.7
Pip
https://bootstrap.pypa.io/get-pip.py
python get-pip.py
virtual environment
( pip install virtualenvwrapper / virtualenvwrapper-win )
IDE Visual Studio Code
cmder
docker (optional)
mysql
HEIDI SQL
Menggunakan PIP
pip --version python -m pip --version
pip install package python -m pip install
package

python -m pip install --upgrade pip


Menginstall dan Menggunakan
Docker
docker --version
docker run hello-world
docker ps
docker ps -a

https://git.io/fjQDr

docker run --name mysqldb -p 3306:3306 -v c:/config/mysql/data:/var/lib/mysql -v


c:/config/mysql/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=rootpasswd -d
mysql:5.7
Virtual Environment
• Virtual Environment
merupakan suatu
area didalam sistem
komputer yang
mengisolasi program
dari program luar.
• Kelebihan
penggunaan VE
adalah jika ada
perubahan/update
sistem luar maka
program didalam VE
tidak akan
terpengaruh
Membuat Virtual Environment
mkvirtualenv -> untuk membuat environment baru

deactiveate -> keluar dari environment tersebut

workon -> list virtual environment yang tersedia

workon nama_env -> masuk ke dalam environment

rmvirtualenv nama_env -> hapus virtual env


Membuat Virtual Environment
• Jalankan cmder untuk memulai pembuatan Virtual
Environment
• Eksekusi baris perintah setelah tanda lambda () berikut:
Install Django
python3 -m pip install django
pip install django
Test Hasil Instalasi
• bikin folder testing
• jalankan perintah :
django-admin startproject testing

• start server dengan perintah


python manage.py runserver
Test Hasil Instalasi
Python Basic
Python Input Output
• Untuk menjalankan program yang ditulis dengan Bahasa pemrograman
Python, ketikkan:
python3 nama_file.py

• Buatlah file dengan nama cobaOutput.py, isikan baris koding berikut:


print (‘Hello World’)
– Jalankan program tersebut
python3 cobaOutput.py

• Buatlah file dengan nama cobaInput.py, isikan baris koding berikut:


var1 = input(‘masukkan nama Anda: ‘)
print (‘Selamat Datang’, var1)
– Jalankan program tersebut, isikan nama Anda
python3 cobaInput.py
Python Function
• Function di dalam Python diawali dengan kata def

• Buatlah fungsi dengan nama hitungLuas didalah file lingkaran.py


def hitungLuas(jari_jari):
luas = 3.14 * jari_jari * jari_jari
return luas

print(‘Luas lingkaran =‘,hitungLuas(10))

• Jalankan program tersebut, masukkan nilai yang diminta


python3 lingkaran.py
Python Condition
• Condition di dalam Python merupakan struktur blok if..elif..else

• Buatlah fungsi dengan nama ganjilGenap didalah file cek.py


def ganjilGenap(angka):
if angka%2==0:
return ‘Genap’
else:
return ‘Ganjil’

print(‘Hasilnya =‘,ganjilGenap(10))

• Jalankan program tersebut, masukkan nilai yang diminta


python3 cek.py
Python Looping
• Looping di dalam Python merupakan struktur blok for atau while

• Buatlah fungsi dengan nama perulanganFor didalah file looping.py


def perulanganFor(angka):
for i in range(angka):
print(i)

perulanganFor(10)

• Jalankan program tersebut, amati hasil outputnya


python3 lopping.py
Web Server Gateway
Interface (WSGI)
Web Server Gateway Interface (WSGI)
- Traditional Web Server based on python
- Dibuat pada akhir 90 an
- Sebagai interface yang menghandle segala request yang
dikirimkan oleh aplikasi atau diterima oleh server
- cikal bakal microservices
- berfungsi sebagai gateway/ middleware web server
- biasa digunakan sebagai services yg berdiri sendiri
Bagaimana WSGI Bekerja

#web_application.py
from wsgiref.simple_server import make_server Inisialisasi Header
def application(environ, start_response): Request Response Function
path = environ.get('PATH_INFO')
if path == '/':
response_body = "Index"
else: Request routing dan response
response_body = "Hello"
status = "200 OK" build
response_headers = [("Content-Length",
str(len(response_body)))]
start_response(status, response_headers) Compile Response
return [response_body]

httpd = make_server(
'127.0.0.1', 8051, application)
Serve HTTP
httpd.serve_forever()
Bagaimana WSGI Bekerja
Microservices
a.k.a Efektifitas Penggunaan WSGI
Framework WSGI
Kenapa Django
- stable dan salah satu framework python yang paling sering di
update (latest version 2.2.3) 1 July 2019
- fokus pada rapid development dan DRY ( Don’t Repeat Yourself )
- Termasuk Batre
- Komunitas yang luas
- Customizeable Framework
- Proteksi dari Serangan
Yang perlu di perhatikan dengan
Django
- Regex
- Django tidak terbilang cepat dalam response, dari setiap update hanya
mengembangkan fitur
- Semakin besar aplikasi yang dibuat semakin lambat dan berat
- Jika terlalu mengikuti aturan django, hasil aplikasi akan terlalu monolithic
- Template error tidak terlihat
- Bukan untuk project kecil
Pengguna Django
Pertemuan Ke-2
Struktur Django
Membuat Aplikasi Dalam Project
Django View
Django Model
Django Template
Pemahaman Model
Struktur Django
Struktur Folder Project
testing/
db.sqllite3 # file database sementara
manage.py # script untuk jalanin django pada project ini
testing/ # project fodler
__init__.py # Treat this folder as python dir
__pycache__/ # cache hasil compile python
settings.py # semua setting website disimpan disini
urls.py # mapping / route website ke view
wsgi.py # web server yang digunakan django
sebagai gateway
Membuat Aplikasi Dalam Project
jalankan perintah python manage.py startapp aplikasi

maka akan muncul struktur folder baru


aplikasi/
__init__.py # sebagai inisialisasi folder tersebut salah satu package nya
python
admin.py # fitur admin django
apps.py # Application Register
migrations/ # List file untuk otomatis perubahan database
models.py # Define model aplikasi
test.py # Django Test Case
views.py # Functional code
Register Aplikasi
pada folder testing/testing
buka file settings.py
dan tambahkan pada bari berikut

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
‘aplikasi’,
]
Django MTV
Struktur Django
View FBV vs CBV
Function Based View
Class Based View
Pros Pros
- mudah di implementasi - Code Reuseability
- mudah di baca - Don’t Repeat Yourself
- straightforward code - Code Extendability

Cons Cons
- tidak reuseable - susah dibaca
- import numpuk
Function Based View
views.py
def contact(request):
if request.method == 'POST':
# Code block for POST request
else:
# Code block for GET request (will also match PUT, HEAD, DELETE, etc)

urls.py
urlpatterns = [
url(r'contact/$', views.contact, name='contact'),
]
Class Based View
views.py
from django.views import View
class ContactView(View):
def get(self, request):
# Code block for GET request

def post(self, request):


# Code block for POST request

urls.py
urlpatterns = [
url(r'contact/$', views.ContactView.as_view(), name='contact'),
]
Model
- Database Tables di django diartikan sebagai class dan disebut “Model”
- Django DB Toolset lebih sering di sebut Object Relational Mapper (ORM)
- Bukan hanya operasi CREATE TABLE, tapi semua operasi CRUD

Post.objects.filter(title__contains='title')
Template
- Template Language
- Template Inheritance
- Melarang Code Execution
- Don’t Repeat Yourselves
URL Mapper
- Buka file testing/testing/urls.py
- tambahkan pattern buat aplikasi “aplikasi”
- redirect default url ke “aplikasi”
- import semua static url
- buat file urls.py di aplikasi
- jalankan makemigration -> python manage.py makemigration
- jalankan migrate -> python manage.py migrate

4
Pemahaman Model
Intruksi
- Membuat aplikasi Perpustakaan
- Model Object menggunakan UML berikut
Definisi Model
- pada django models adalah sebuah rangka data dari sebuah
aplikasi, Table Database yang dibuat dalam bentuk class dan
disebut Model
- dimana models terdapat bagian dari “fields”, “methods” dan
“metadata”
- Fields adalah kolom kolom yang akan dibuat pada table dengan
sudah mendefinisikan tipe data kolom tersebut
- Methods adalah function buatan untuk model tersebut dimana
khusus untuk return dari database
- Metadata adalah fitur yang dibuat untuk django dimana kita bisa
specify custom order atau database name
- Tersirat pada file “models.py” pada setiap aplikasi
Contoh sebuah model
Model - Fields

my_field_name = models.CharField(max_length=20, help_text='Enter field documentation')

- setiap field yang dibuat akan menjadi sebuah kolom pada sebuah table di
database, diambil dari nama variable tersebut
- pada contoh diatas akan membuat kolom bernama my_field_name
dengan Tipe Data Alhpa Numberic (varchar (?))
- menambahkan argumen argumen untuk custom definisi
- pada contoh diatas menggunakan max_length untuk menentukan ukuran
maksimal huruf dan mempunya deskripsi dengan argumen help_text
Jenis Jenis Field Tipe
SlugField max_length ManyToManyField model

SmallIntegerField limit_choices_to

TextField OneToOneField

TimeField auto_now

auto_now_add

URLField max_length

ForeignKey model

related_name

to_field

db_constraint (True)

on_delete
Jenis Jenis Field Tipe
AutoField FileField upload_to

BigIntegerField storage

BinaryField FloatField

BooleanField ImageField upload_to

CharField max_length height_field

CommaSeparatedInte- max_length width_field


gerField
IntegerField
DateField auto_now
IPAddressField
auto_now_add
GenericIPAddressField protocol
DateTimeField (as above)
unpack_ipv4
DecimalField max_digits
NullBooleanField
decimal_places
PositiveIntegerField
EmailField max_length
PositiveSmallIntegerField
FileField upload_to
Jenis Jenis Field Options
null

blank

choices

db_column

db_index

db_tablespace

default

editable

error_messages

help_text

primary_key

unique

unique_for_[date|month|year]

verbose_name

validators
Model - Metadata
class Meta:
ordering = ['-my_field_name']

1. metadata pada django paling terkenal dengan default urutkan pada


setiap record yang diberi oleh view
2. cukup dengan membuat variable dengan nama “ordering” dan membuat
array dengan nama sebuah field.
3. sebelum nama sebuah field di dalam string tersebut jika ditambahkan -
artisanya diurutkan berdasarkan paling bawah (descending)
4. untuk order pun bisa secara custom seperti ordering = ['title', '-pubdate']
Jenis Jenis Metadata
abstract

app_label

db_table

db_tablespace

get_latest_by

managed

order_with_respect_to

ordering

permissions

proxy

unique_together

index_together

verbose_name

verbose_name_plural
Model - Methods
1. pada dasarnya setiap file model harus di definisikan dengan __str__()
supaya sesuai dengan standar python
2. Biasanya penggunaan ini lebih sering digunakan untuk model advance
Segelintir tentang Model Management
- Membuat dan merubah records

# Buat record baru dengan model constructor.


record = MyModelName(my_field_name="Instance #1")

# Simpan object ke dalam database


record.save()

# Akses isi dari model field menggunakan python atribut.


print(record.id) # Pasti akan return 1 untuk record pertama
print(record.my_field_name) # print 'Instance #1' sesuai dengan isinya

# Bagian ini merubah field tersebut dan menyimpannya


record.my_field_name = "New Instance Name"
record.save()
Segelintir tentang Model Management
- Mencari data

# mengambil semua object pada model


all_books = Book.objects.all()

wild_books = Book.objects.filter(title__contains='wild')
number_wild_books = wild_books.count()

# match on: Fiction, Science fiction, non-fiction etc.


books_containing_genre =
Book.objects.filter(genre__name__icontains='fiction')
Pertemuan Ke-3
Membuat Model dan Aplikasi Perpustakaan
Django Admin
Membuat Home Page
Membuat Halaman List Buku
Membuat Halaman untuk Author
Membuat Model dan Aplikasi
Perpustakaan
Buat Environment dan Django Baru
Buat Project dengan nama Perpustakaan
Buat Aplikasi katalog
Genre Model
class Genre(models.Model):
"""Model representing a book genre."""
name = models.CharField(max_length=200, help_text='Enter a book
genre (e.g. Science Fiction)')

def __str__(self):
"""String for representing the Model object."""
return self.name

- Hanya membuat field “name” dengan max_length 200


Book Model (1)
from django.urls import reverse # Used to generate URLs by reversing the
URL patterns

class Book(models.Model):
"""Model representing a book (but not a specific copy of a book)."""
title = models.CharField(max_length=200)

# Foreign Key used because book can only have one author, but authors
can have multiple books
# Author as a string rather than object because it hasn't been declared
yet in the file
author = models.ForeignKey('Author', on_delete=models.SET_NULL,
null=True)

summary = models.TextField(max_length=1000, help_text='Enter a brief


description of the book')
isbn = models.CharField('ISBN', max_length=13, help_text='13 Character
<a href="https://www.isbn-international.org/content/what-isbn">ISBN
number</a>')
Book Model (2)
# ManyToManyField used because genre can contain many books. Books can
cover many genres.
# Genre class has already been defined so we can specify the object
above.
genre = models.ManyToManyField(Genre, help_text='Select a genre for
this book')

def __str__(self):
"""String for representing the Model object."""
return self.title

def get_absolute_url(self):
"""Returns the url to access a detail record for this book."""
return reverse('book-detail', args=[str(self.id)])
BookInstance Model (1)
import uuid # Required for unique book instances

class BookInstance(models.Model):
"""Model representing a specific copy of a book (i.e. that can be
borrowed from the library)."""
id = models.UUIDField(primary_key=True, default=uuid.uuid4,
help_text='Unique ID for this particular book across whole library')
book = models.ForeignKey('Book', on_delete=models.SET_NULL, null=True)
imprint = models.CharField(max_length=200)
due_back = models.DateField(null=True, blank=True)

LOAN_STATUS = (
('m', 'Maintenance'),
('o', 'On loan'),
('a', 'Available'),
('r', 'Reserved'),
)
BookInstance Model (2)
status = models.CharField(
max_length=1,
choices=LOAN_STATUS,
blank=True,
default='m',
help_text='Book availability',
)

class Meta:
ordering = ['due_back']

def __str__(self):
"""String for representing the Model object."""
return f'{self.id} ({self.book.title})'
Author Model
class Author(models.Model):
"""Model representing an author."""
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
date_of_birth = models.DateField(null=True, blank=True)
date_of_death = models.DateField('Died', null=True, blank=True)

class Meta:
ordering = ['last_name', 'first_name']

def get_absolute_url(self):
"""Returns the url to access a particular author instance."""
return reverse('author-detail', args=[str(self.id)])

def __str__(self):
"""String for representing the Model object."""
return f'{self.last_name}, {self.first_name}'
Perintah Menjalankan Migration
python manage.py makemigraitons <apps>
Perintah ini membuat file migrasi untuk semua aplikasi yang migrasi tersedia, jika
ditambahkan nama apps maka apps tersebut saja yang akan dibuatkan migrasi file nya
ke dalam folder migrations

python manage.py migrate


Perintah ini melakukan migrasi dari file menjadi sebuah data di database

- python manage.py migrate <apps> zero


Perintah ini akan melakukan rollback ulang untuk semua migrasi yang dibuat dari
makemigration, jika dispesifikasikan aplikasinya, maka aplikasi itu saja yang akan di
revert

Note : Selalu hapus isi folder migration untuk melakukan make migration ulang.
Hasil dari migrate
Django Admin
Django Admin ???
- Auto CMS
- konfigurasi django untuk
- optional untuk digunakan
- Model Test
Register Model ke Django Admin
buka file /perpustakaan/katalog/admin.py
dan daftarkan semua model ke dalam file ini seperti berikut
from katalog.models import Author, Genre, Book, BookInstance

admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Genre)
admin.site.register(BookInstance)
Membuat super user
python3 manage.py createsuperuser

python3 manage.py runserver


Login ke admin dan akan muncul seperti berikut
Tambah semua data model

minimal 5 record
dimulai dengan urutan model
Author, Genre, Book dan BookInstances
List View Django Admin (1)
Membuat Halaman lebih menarik pada setiap model dengan memberikan list
view, ikuti langkah berikut

1. comment bagian model Author


# admin.site.register(Author)

1. Sekarang buat class AuthorAdmin dan register class tersebut


# Define the admin class
class AuthorAdmin(admin.ModelAdmin):
list_display = ('last_name', 'first_name', 'date_of_birth',
'date_of_death')

# Register the admin class with the associated model


admin.site.register(Author, AuthorAdmin)
List View Django Admin (2)
3. Lakukan pada model Book dan BooksInstance dengan di comment dl
# admin.site.register(Book)
# admin.site.register(BookInstance)

4. Sekarang buat class BookAdmin dan register class tersebut


# Register the Admin classes for Book using the decorator
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'display_genre')

# Register the Admin classes for BookInstance using the decorator


@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
list_filter = ('status', 'due_back')
List View Django Admin (3)
5. Diakrenakan relasi “genre” adalah ManyToMany artinya pada list ini harus
ditampilkan genrenya apa aja, maka sempat dilihat pada class BookAdmin di
admin.py terdapat field yang tidak ada yaitu “display_genre”,
Artinya harus dibuatkan method pada model untuk menampilkan semua
record untuk many to many

lalu pada models.py tambahkan line berikut pada class Book

def display_genre(self):
"""Create a string for the Genre. This is required to display genre
in Admin."""
return ', '.join(genre.name for genre in self.genre.all()[:3])

display_genre.short_description = 'Genre'
List View Django Admin (4)
List View Django Admin (5)
Mengontrol Field yang dibutuhkan
pada admin.py di class tinggal tambahkan line berikut pada AuthorAdmin

fields = ['first_name', 'last_name', ('date_of_birth', 'date_of_death')]


Custom Detail View
contoh pada BookInstanceAdmin bisa ditambahkan line berikut
fieldsets = (
(None, {
'fields': ('book', 'imprint', 'id')
}),
('Availability', {
'fields': ('status', 'due_back')
}),
)
Inline Editing Detail View
tambahkan class BooksInstanceInline
class BooksInstanceInline(admin.TabularInline):
model = BookInstance

pada BookAdmin class tambahkan

inlines = [BooksInstanceInline]
Membuat Home Page
Main Data Flow
Define Resource URL
URL yang kita butuhkan

● catalog/ — The home (index) page.


● catalog/books/ — A list of all books.
● catalog/authors/ — A list of all authors.
● catalog/book/<id> — The detail view for a particular book, with a field primary key of <id>
(the default). For example, the URL for the third book added to the list will be
/catalog/book/3.
● catalog/author/<id> — The detail view for the specific author with a primary key field of
<id>. For example, the URL for the 11th author added to the list will be
/catalog/author/11
Index Page - URL Mapping
- pastikan pada perpustakaan/urls.py sudah didaftarkan catalog.url
urlpatterns += [ path('catalog/', include('catalog.urls')), ]

- buat file urls.py pada aplikasi katalog


urlpatterns = [
path('', views.index, name='index'),
]

- Note : pada dasarnya pada template untuk mendapatkan url index cukup
dengan seperti berikut <a href="{% url 'index' %}">Home</a>
Index Page - Specify view
pada aplikasi katalog buka file views.py dan tambahkan line berikut
from catalog.models import Book, Author, BookInstance, Genre

def index(request):
# Hitung data dari object
num_books = Book.objects.all().count()
num_instances = BookInstance.objects.all().count()

# Buku tersedia (status = 'a')


num_instances_available = BookInstance.objects.filter(status__exact='a').count()

# The 'all()' selalu terdefinisi sebagai default.


num_authors = Author.objects.count()

context = {
'num_books': num_books,
'num_instances': num_instances,
'num_instances_available': num_instances_available,
'num_authors': num_authors,
}

# Render the HTML template index.html with the data in the context variable
return render(request, 'index.html', context=context)
Penjelasan Template
Block dan Extends, Lets talk with code!
Index Page - Template
1. Pada project buat satu folder namanya Templates dan buat sebuah file
dengan nama file base_generic.html dengan line code PADA SLIDE
SELANJUTNYA

1. pada direktori perpustakaan/katalog/static/css buat file styles.css

.sidebar-nav { margin-top: 20px; padding: 0; list-style: none; }

1. Buat template index.html dengan line code PADA SLIDE KEDUA


SELANJUTNYA
Konfigurasi folder template
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Hasil
Generic List dan Detail View

Dibagian ini kita lanjut dengan


menambahkan detail page buat buku
dan author
Book List Page - URL Mapping
Tambah line code pada aplikasi katalog di file urls.py

path('books/', views.BookListView.as_view(), name='books'),


path('book/<int:pk>', views.BookDetailView.as_view(), name='book-detail'),

Line pertama menjelaskan setiap url /katalog/books akan diarahkan ke class


BookListView di dalam file views, dan karena disini menggunakan class based
view maka harus ditambahkan as_view()

Line kedua menjelaskan setiap url /katalog/book/IDBUKU dimana IDBUKU itu


adalah angka, seperti /katalog/book/1 maka akan di arahkan ke class
BookDetailView di dalam file views, dan karena disini menggunakan class
based view maka harus ditambahkan as_view()
Book List Page - URL Mapping (2)
path('book/<int:pk>', views.BookDetailView.as_view(), name='book-detail'),

Masih lanjut di line kedua, pada bagian <int:pk> ini menjelaskan kalau url ini
id buku, disini dispesifikasi secara spesial dimana idbuku ini harus berupa
integer dan parameter variable nya adalah pk

untuk parameter variable bisa cukup sederhana langsung parameter variable


yang di passing dengan cukup <pk> saja
Advance path matchmaking
- normalnya url mapping menggunakan path, untuk advance dengan
kebutuhan yang khusus bisa menggunakan re_path atau regex path
seperti contoh url mapping ini

path('book/<int:pk>', views.BookDetailView.as_view(), name='book-detail'),

- dalam bentuk regex seperti berikut

re_path(r'^book/(?P<pk>\d+)$', views.BookDetailView.as_view(), name='book-


detail'),

- r’^book/(?P<pk>\d+)$’ ini regex jelasnya, untuk merincinya


- r’.....’ artinya menspesifikasi akan ada rumus regex
- ...^book/… artinya sesuaikan dengan text awal book/
Advance path matchmaking (2)
- r’^book/(?P<pk>\d+)$’
- …(...)... jika parameter sebelumnya sesuai maka dilanjut dengan ( )
artinya tangkap semua yang ada di dalam kurung dan kirim sebagai
parameter variable
- …(?P<name>...)... artinya parameter yang dibuat untuk parse hasil regex
- …\d… cocokkan hanya digit
- …+... artinya cocokkan dengan satu atau karakter yang sesuai selanjuta
dengan karakter sebelumnya
- …$ cocokkan dengan text terakhir
cheat sheet regex
^ Cocokkan bagian awal text

$ Cocokkan bagian akhir text

\d Cocokkan hanya angka (0, 1, 2, ... 9)

\w Cocokkan hanya karakter dari alphabetic ataupun special character ataupun angka

+ Cocokkan satu atau lebih karakter sebelumnya. Misalnya, untuk mencocokkan satu digit atau lebih,
Anda akan menggunakan \ d +. Untuk mencocokkan satu atau lebih karakter "a", Anda bisa
menggunakan tanda +

* Cocokkan nol atau lebih dari karakter sebelumnya. Misalnya, untuk mencocokkan apa pun atau kata
yang dapat Anda gunakan \ w *

() Tangkap bagian dari pola di dalam kurung. Setiap nilai yang ditangkap akan diteruskan ke tampilan
sebagai parameter yang tidak disebutkan namanya (jika beberapa pola ditangkap, parameter terkait
akan diberikan dalam urutan pengambilan yang dinyatakan).

(?P<name>...) Ambil pola (ditunjukkan oleh ...) sebagai variabel bernama (dalam hal ini "nama"). Nilai yang diambil
diteruskan ke tampilan dengan nama yang ditentukan. Oleh karena itu, pandangan Anda harus
menyatakan argumen dengan nama yang sama!

[ ] Cocokkan dengan satu karakter di set. Misalnya, [abc] akan cocok dengan 'a' atau 'b' atau 'c'. [- \ w]
akan cocok dengan karakter '-' atau karakter kata apa pun.
Lanjut Book List Page
Book List Page - View
Bikin Class BookListView di aplikasi katalog pada file views.py dengan line
code berikut
class BookListView(generic.ListView):
model = Book

def get_context_data(self, **kwargs):


context = super(BookListView, self).get_context_data(**kwargs)
# Create any data and add it to the context
context['some_data'] = 'This is just some data'
return context

def get_queryset(self):
return Book.objects.filter(title__icontains='war')[:5]
Book List Page - View (2)
Penjelasan lanjut tentang Class Based View, bisa dilihat dari line code
sebelumnya, untuk line class BookListView(generic.ListView): Maksudnya adalah
untuk mendeklarasi CBV pada django

pada line model = Book Maksudnya adalah untuk spesifikasi model yang dipakai

pada function berikut


def get_context_data(self, **kwargs):
context = super(BookListView, self).get_context_data(**kwargs)
# Create any data and add it to the context
context['some_data'] = 'This is just some data'
return context

Maksudnya adalah untuk context_data dapat dilakukan custom variable yang


bisa di passing
Book List Page - View (3)
pada function berikut
def get_queryset(self):
return Book.objects.filter(title__icontains='war')[:5]

Bermaksud untuk define custom queryset pada class ini, hasilnya akan
menampilkan data buku yang hanya memiliki title salah satu katanya ada
“war”
Book Detail Page - View
Bikin Class BookDetailView di aplikasi katalog pada file views.py dengan line
code berikut
class BookDetailView(generic.DetailView):
model = Book

def book_detail_view(request, primary_key):


try:
book = Book.objects.get(pk=primary_key)
except Book.DoesNotExist:
raise Http404('Book does not exist')

return render(request, 'catalog/book_detail.html', context={'book':


book})
Book Page - Template
1. buat files book_list.html pada folder katalog templates
2. buat files book_detail.html pada folder katalog templates
Result!!
Buat untuk Author
Wassalamualaikum

“SEMOGA SUKSES”

Anda mungkin juga menyukai