Mengubah file views.py
atau/dan models.py
menjadi direktori
(python package views
, models
), sehingga bisa dipisahkan
menjadi beberapa file, ini lebih baik dibandingkan hanya satu file
yang terlalu panjang.
Hasil pengubahan sebisa mungkin tidak banyak mengubah mekanisme import
,
karena untuk proyek yang sudah besar, proses refactor yang memengaruhi
mekanisme import
akan lebih panjang (sulit) prosesnya.
- tambahkan direktori
splitviewsmodels/
ke sebuah Django Project - tambahkan
SplitviewsmodelsConfig
ke settings.py
INSTALLED_APPS = [
'splitviewsmodels.apps.SplitviewsmodelConfig',
# apps lain
]
- tambahkan
split/
ke urls.py di direktori Django Project
from django.urls import path, include # tambahkan fungsi include
urlpatterns = [
# paths lain
path('split/', include('splitviewsmodels.urls')),
]
- lakukan persiapan pembuatan tabel dari model
TabelA
danTabelB
dengan perintahpython manage.py makemigrations splitviewsmodels
dan pastikan tidak ada error. Proses ini akan menghasilkan file baru di direktorimigrations/
, misalnya file0001_initial.py
yang berisi skenario pembuatan tabel-tabel tersebut. - lakukan proses migrasi untuk pemasangan tabel-tabel tersebut ke basis data dengan perintah
python manage.py migrate splitviewsmodels
dan pastikan lagi tidak ada error. - cek kembali apakah skenario sudah terpasang dengan perintah
python manage.py showmigrations splitviewsmodels
atau bisa juga tanpa penyebutan nama Django Apppython manage.py showmigrations
akan menampilkan semua Django App yang terinstal.
-
dibandingkan sebuah Django App yang baru dibuat, bedanya
splitviewsmodels
menambahkan satu fileurls.py
, file ini akan diacu olehurls.py
yang ada di Django Project untuk URL yang diawali /split/ -
di file
urls.py
, dengan menuliskan path'fa'
, maka path lengkapnya adalah /split/fa dimana akan diproses keviews
dengan nama (fungsi)fitur_a
. Terlihat di sini, tidak ada perbedaan dalam melakukanimport
dariviews
, tidak ada penyebutan nama modulfa
(filefa.py
). Berikutnya path ini diberi namafitur-a
, untuk dapat dikenali di seluruh proyek dengan nama tersebut, contohnya ada di bagiantests
. -
di file
urls.py
, untuk penulisan path'fb'
penjelasannya mirip dengan penulisan path'fa'
di atas. Tidak ada perbedaan dalam melakukanimport
dariviews
, tidak ada penyebutan nama modulfb
(filefb.py
). -
fokus utama dari Django App ini memberikan contoh menggantikan file
views.py
dengan sebuah python packageviews
, yaitu sebuah direktoriviews
yang di dalamnya berisi file__init__.py
. Secara bawaan, pada saat Django App dibuat ada fileviews.py
, kemudian file ini dapat dihapus jika sudah dibuat packageviews
. Dalam direktori inilah, kita dapat membuat sejumlah file python baru, misalnya kita pisahkan satu fitur masuk dalam satu file, agar setiap file isinya tidak terlalu panjang. fokus berikutnya memastikan prosesimport
tidak berubah seperti pada saat hanya satu file, dengan mendaftarkan semua file dan fitur di dalamnya ke__init__.py
yang ada dalam packageviews
tersebut.
from .fa import * # impor semua fungsi di file fa sebagai fungsi dari views
from .fb import * # impor semua fungsi di file fb sebagai fungsi dari views
- fokus utama selanjutnya adalah memberikan contoh menggantikan file
models.py
dengan sebuah python packagemodels
, yaitu sebuah direktoriviews
yang di dalamnya berisi file__init__.py
. Mekanismenya sama dengan sebelumnya, dimana filemodels.py
bawaan dari pembuatan Django App dapat dihapus jika sudah dibuat packagemodels
. Mengenai fokus berikutnya dimana prosesimport
tidak berubah, kita juga daftarkan ke__init__.py
.
from .ta import * # impor semua model (tabel) and fungsi di file ta sebagai definisi dari models
from .tb import * # impor semua model (tabel) and fungsi di file ta sebagai definisi dari models
-
Django App
splitviewsmodels
dilengkapi dengantests.py
, yang akan mengakses halaman yang terdefinisi diurls.py
, serta menguji model basis data yang terkait. -
Pada
test_fitur_a
akan menguji melalui akses halaman dengan nama'fitur-a'
yang dikonversi melalui fungsireverse()
menghasilkan path URL /split/fa untuk dipastikan dapat diakses atau HTTP 200. Kemudian isi dari halamannya dicek sesuai dengan kembalian views (fungsi)fitur_a
. -
Pada
test_fitur_b
akan menguji mirip dengan skenario sebelumnya, bedanya dalam views (fungsi)fitur_b_1
melakukan query ke dua model (tabel di basis data). Sehingga saat dipastikan halamannya dapat diakses atau HTTP 200, artinya juga memastikan bahwa koneksi ke basis data juga berhasil. Catatan: bahwa dalam proses pengujian akan membuat basis data baru, sehingga terpisah dari basis data yang digunakan saaat dioperasikan, dan dimulai dari kosong. -
Pada
test_tabel
akan menguji lebih detail model (tabel di basis data). Menguji dengan melakukan query dari model, menguji dengan memastikan masih kosong, mengisi dari model (dan field) yang sesuai, kemudian menguji bahwa proses mengisi data berhasil.
Dari direktori Django Project, eksekusi perintah: python manage.py runserver
.
Kemudian buka URL http://127.0.0.1:8000/split/fa
dan http://127.0.0.1:8000/split/fb
di browser.
Untuk berhenti dari proses runserver
, dengan menekan Ctrl c
.
Dari direktori Django Project, eksekusi perintah: python manage.py test splitviewsmodels