Beralih ke Django Framework

1378

Setelah hampir 2 tahun saya memiliki blog yang saya buat menggunakan bahasa scripting PHP ini, beberapa hari yang lalu saya mencoba untuk migrasi ke Python menggunakan Django Framework. Kalau artikel ini bisa diakses, berarti usaha saya ini berhasil. Pertengahan tahun 2017 ini, banyak rekan saya membuat skripsi dengan menggunakan Python, misalnya aplikasi web dengan framework Django. Selain itu, banyak juga proyek menarik, terutama yang berhubungan dengan data mining dan image processing, jadi saya menganggap ini sebagai pengenalan.

Framework Django memungkinkan rapid development. Dalam waktu 2 jam, semua Model di blog saya ini sudah siap digunakan. Saya juga menggunakan ModelForm dan Admin site bawaan. Ini semua jauh lebih cepat dibandingkan ketika saya masih menggunakan core PHP (meskipun saya belum pernah menggunakan framework semacam Laravel). Berikut ini contoh model:

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    drafted = models.BooleanField()
    views = models.IntegerField()

Terlihat pada contoh di atas, bahwa pada umumnya Model adalah sebuah tabel pada basis data. Membuat query dari model pada Django sangat mudah. Contohnya:

related_articles = Article.objects.exclude(drafted=False).order_by('-views', '-created_at')[:10] 

Kode di atas akan memuat 10 artikel yang bukan merupakan draft, terurut berdasarkan jumlah view dan tanggal dibuat, keduanya descending (perhatikan tanda hyphen (-) pada -views dan -created_at). Kesepuluh artikel tersebut akan 'tersimpan' pada variabel list related_articles.

Untuk menyajikan informasi melalui template HTML, konteks disajikan dari View menggunakan dictionary, misalnya:

...
context = {'article': article, 'related_articles': rel_arts, 'comments': comments}
return render(request, 'blog/view_article.html', context)

Contoh di atas menggunakan fungsi shortcut render(). File html yang digunakan adalah view_article.html. Pada Template, data pada dictionary tadi ditampilkan dengan cara:

<ul>
{% for a in related_articles %}
    <li><a href="{{a.url}}">{{a.title}}</a></li>
{% endfor %}
</ul>

Pada contoh di atas, setiap obyek di-iterasi dan atribut url dan title dipanggil untuk ditampilkan ke user sebagai html unordered list <ul>.

Meskipun disebut framework MVT (Model View Template), pada intinya tetap saja MVC (Model View Controller). Pada Django, view dan router bertindak sebagai controller sedangkan template sebagai view.

Dokumentasi resmi Django cukup lengkap dan dilengkapi dengan contoh serta tutorial, serupa dengan CodeIgniter (PHP).

Untuk deploy proyek Django, kita bisa menggunakan server atau VPS sendiri. Django bisa di-deploy menggunakan Apache dan mod_wsgi. Layanan shared hosting bisa juga menjadi alternatif yang mudah. Selain itu, kita bisa menggunakan pythonanywhere dan Heroku. Untuk dua yang terakhir ini, kita harus memikirkan keterbatasan layanan mereka (contohnya tidak dapat upload file media, harus menggunakan layanan eksternal seperti Amazon S3).

p.s Terima kasih kepada bu Rodiah (Dr.) yang pada akhir tahun 2016 lalu mengajarkan dasar-dasar python dan django dengan antusias kepada kami, juga kepada kak Alvian yang sudah membagi ilmunya kepada sebagian dari kami (yang kini kembali sibuk dengan urusannya masing-masing), terutama ketika masa penulisan skripsi dulu.