5 kerangka kerja web Python yang besar dan kuat

Saat Anda membangun back end untuk situs web atau layanan, bahkan yang tampak sederhana pada pandangan pertama, Anda mungkin akan segera menemukannya. Bahkan situs "sederhana" ternyata menjadi sarang kerumitan. Manajemen pengguna, desain data, pengiriman formulir, keamanan, —menerapkan semua itu secara manual akan membosankan.

Untuk proyek web besar itu, ketika Anda tahu Anda akan membutuhkan semuanya ditambah wastafel dapur, yang terbaik adalah beralih ke kerangka kerja yang dilengkapi dengan baterai (dan pengisi daya) yang disertakan. Berikut adalah lima kerangka kerja web kelas berat untuk Python yang datang dengan semua yang Anda butuhkan untuk membangun aplikasi web yang kuat dan beberapa lainnya.

CubicWeb

CubicWeb disebut sebagai "kerangka aplikasi web semantik yang mendukung desain yang digunakan kembali dan berorientasi objek". Ini adalah sistem yang menarik — seperti dicatat oleh Rick Grehan ketika dia memeriksanya kembali pada tahun 2011 — yang menekankan penggunaan abstraksi dan blok penyusun kode yang dapat digunakan kembali yang disebut "kubus". Faktanya, CubicWeb mungkin terlalu abstrak atau istimewa untuk beberapa pengembang, dan kecepatan pengembangan serta fiturnya membuat kerangka kerja lain tertinggal.

Kubus adalah komponen perangkat lunak yang menampilkan skema (model data), entitas (logika pemrograman), dan tampilan. Dengan merakit beberapa kubus, masing-masing melakukan tugasnya sendiri, Anda dapat membuat aplikasi perangkat lunak dengan menggunakan kembali kode Anda sendiri dan kode orang lain.

Pada intinya, CubicWeb menyediakan perancah dasar yang digunakan oleh setiap aplikasi web: sebuah "repositori" untuk koneksi dan penyimpanan data; sebuah "mesin web" untuk permintaan / respons HTTP dasar dan tindakan CRUD; dan skema untuk pemodelan data. Semua ini dijelaskan dalam definisi kelas Python.

Untuk menyiapkan dan mengelola instance CubicWeb, Anda bekerja dengan alat baris perintah yang mirip dengan yang digunakan untuk Django. Sistem templat bawaan memungkinkan Anda menghasilkan keluaran HTML secara terprogram. Anda juga dapat menggunakan kubus yang menyediakan alat untuk UI web, seperti untuk kerangka HTML Bootstrap.

Meskipun CubicWeb mendukung Python 3 (sejak versi 3.23), tampaknya CubicWeb tidak menggunakan fungsionalitas asinkron asli Python 3. Cara memutar untuk menyertakan asinkron adalah dengan menggunakan modul cubicweb.pyramid untuk menggunakan kerangka kerja Pyramid sebagai server web, dan menggambar di garpu Pyramid yang menggunakan konstruksi asinkron. Ini juga memungkinkan untuk melakukan tugas secara asinkron dengan kubus cubicweb-worker. Tapi apa pun yang lebih mudah tampaknya di luar jangkauan untuk saat ini.

Untuk mengambil atau memanipulasi data persisten dalam aplikasi CubicWeb, Anda menggunakan Relation Query Language (RQL), yang menggunakan sintaks mirip SQL secara samar tetapi berpola setelah SparQL W3C. Pembenaran CubicWeb untuk ini, sekali lagi, abstraksi: RQL menyediakan rute yang sangat terpisah untuk menghubungkan berbagai sumber data.

Karena CubicWeb memiliki banyak dependensi, sebaiknya gunakan pip installuntuk mengambil semuanya. Anda mungkin juga harus melakukan sejumlah penyesuaian manual pada lingkungan lokal. Ini berbeda dengan kerangka kerja lain yang hanya menjalankan pip installatau melepaskan kode kerangka kerja ke dalam subfolder dari proyek lain yang diperlukan. Atau Anda bisa menggunakan kontainer Docker untuk menjalankan semuanya.

CubicWeb mengacu pada dokumentasinya yang panjang sebagai "buku." Penulis buku tersebut telah meluangkan waktu untuk menjelaskan pendekatan CubicWeb yang tidak biasa, mendemonstrasikan bagaimana membangun beberapa aplikasi dasar, memasukkan referensi API, dan secara umum berusaha keras untuk lebih spesifik.

CubicWeb tetap dalam pengembangan aktif, jika lambat. Rencana untuk CubicWeb 4.0 telah dipertimbangkan sejak 2012, tetapi belum ada jadwal yang ditawarkan untuk mengirimkannya.

Django

Dalam dekade dan perubahan sejak Django pertama kali muncul, ini telah menjadi salah satu kerangka kerja Python yang paling banyak digunakan untuk membuat aplikasi web. Django hadir dengan hampir semua baterai yang mungkin Anda perlukan, membuatnya lebih cocok untuk membangun aplikasi besar daripada yang kecil.

Django menghabiskan beberapa tahun duduk di versi 1.x. Ketika Django 2.0 tiba pada akhir 2017, itu menjatuhkan kompatibilitas dengan Python 2 dan mendukung Python 3.4 dan yang lebih baru. Django 3.0, dirilis pada Desember 2019, membutuhkan Python 3.6 atau lebih baik, dan menambahkan dukungan untuk standar ASGI asinkron baru untuk aplikasi web Python.

Bagian penting dari seruan Django adalah kecepatan penyebaran. Karena Django menyertakan begitu banyak bagian yang Anda butuhkan untuk mengembangkan aplikasi web rata-rata, Anda dapat bergerak dengan cepat. Perutean, penguraian URL, konektivitas database termasuk ORM (pemeta relasional objek), validasi formulir, perlindungan serangan, dan pembuatan template semuanya ada di dalamnya.

Anda akan menemukan blok bangunan untuk skenario aplikasi web yang paling umum. Manajemen pengguna, misalnya, ditemukan di kebanyakan situs web, jadi Django menawarkannya sebagai elemen standar. Daripada harus membuat sistem Anda sendiri untuk melacak akun pengguna, sesi, kata sandi, log-in / log-out, izin admin, dan seterusnya, Django menyediakan fitur-fitur itu secara asli. Mereka dapat digunakan sebagaimana adanya atau diperluas untuk mencakup kasus penggunaan baru dengan pekerjaan minimal.

Django mempunyai standar yang waras dan aman yang membantu melindungi aplikasi web Anda dari serangan. Saat Anda menempatkan variabel di template halaman, seperti string dengan HTML atau JavaScript, konten tidak ditampilkan secara harfiah kecuali Anda secara eksplisit menetapkan instance variabel tersebut sebagai aman. Ini dengan sendirinya menghilangkan banyak masalah umum pembuatan skrip lintas situs. Jika ingin melakukan validasi formulir, Anda dapat menggunakan semuanya mulai dari perlindungan CSRF sederhana hingga mekanisme validasi bidang demi bidang lengkap yang mengembalikan umpan balik kesalahan mendetail.

Sebuah set fitur sekaya dan seluas Django tidak akan banyak bagus tanpa dokumentasi yang kuat untuk menyertainya. Dokumentasi Django mempelajari setiap aspek kerangka dari berbagai sudut. Bekerja dengan Python 3 atau ragam bahasa lainnya, melakukan keamanan dengan benar, menerapkan komponen aplikasi web umum (seperti sesi atau pagination), membuat peta situs — semuanya tercakup. API untuk setiap lapisan aplikasi — model, tampilan, dan template — juga dijelaskan secara mendetail.

Dengan kekuatan yang besar, bagaimanapun, datanglah kompleksitas yang besar. Aplikasi Django mempunyai reputasi sebagai yang paling berat, penuh dengan banyak bagian yang bergerak. Bahkan aplikasi Django sederhana memerlukan cukup banyak konfigurasi untuk dapat dijalankan. Jika tujuan Anda adalah melakukan sedikit lebih dari menyiapkan beberapa titik akhir REST sederhana, Django hampir pasti berlebihan.

Django juga memiliki keunikannya sendiri. Misalnya, template halaman tidak dapat menggunakan callable. Contoh: Anda dapat mengirimkan {{user.name}}sebagai komponen dalam template, tetapi tidak {{user.get_name()}}. Itu salah satu cara Django memastikan templat tidak secara tidak sengaja membuat Anda kesal, tetapi batasan itu dapat mengganggu jika Anda tidak siap untuk itu. Meskipun ada beberapa solusi, solusi tersebut cenderung memengaruhi kinerja.

Mulai versi 3.0, Django telah menambahkan dukungan untuk tampilan asinkron. Sayangnya, belum ada dukungan untuk asinkron di bagian lain dari tumpukan Django, seperti ORM. Tetapi Anda dapat menerapkan Django menggunakan ASGI untuk mendapatkan keuntungan penuh dari tampilan asinkron.

Web2py

Dalam dunia pemrograman Ruby, Ruby on Rails adalah kerangka kerja web de facto. Profesor ilmu komputer Universitas DePaul, Massimo Di Pierro, terinspirasi oleh Rails untuk membuat kerangka kerja web dengan Python yang juga mudah diatur dan digunakan. Hasilnya adalah Web2py.

Daya tarik terbesar Web2py adalah lingkungan pengembangan bawaannya. Saat Anda menyiapkan instance Web2py, Anda diberikan antarmuka web, pada dasarnya adalah editor aplikasi Python online, tempat Anda dapat mengonfigurasi komponen aplikasi. Ini biasanya berarti membuat model, tampilan, dan pengontrol, masing-masing dijelaskan melalui modul Python atau template HTML. Beberapa contoh aplikasi hadir dengan Web2py di luar kotak. Anda dapat membongkarnya untuk melihat cara kerjanya atau memanfaatkannya sebagai template awal untuk membuat aplikasi Anda sendiri.

Pengembang biasanya menerapkan Web2py dengan mengunduh kode sumbernya dan mengembangkannya. Tetapi untuk pengguna yang kurang teknis di Windows atau MacOS, pembuat Web2py menawarkan versi yang pada dasarnya adalah server mandiri. Unduh, buka kemasan, dan jalankan salah satu versi ini, dan Anda akan memiliki server web lokal dengan salinan bawaan Web2py yang telah dikonfigurasi sebelumnya. Ini adalah cara yang bagus untuk mulai membuat aplikasi Web2py, yang kemudian dapat diterapkan di tempat lain sesuai kebutuhan.

Antarmuka web Web2py dibuat dengan Bootstrap 4, sehingga mudah dilihat dan dinavigasi. Editor dalam browser bukanlah pengganti IDE lengkap, tetapi dilengkapi dengan bantuan bermanfaat seperti penomoran baris dan penyorotan sintaks Python (termasuk indentasi otomatis). Juga disertakan adalah antarmuka web cepat ke shell Python, sehingga Anda dapat berinteraksi dengan Web2py dari baris perintah — konsesi yang bagus untuk para ahli.

Sistem abstraksi data yang digunakan dalam Web2py bekerja sedikit berbeda dari ORM Django dan ORM lainnya yang diinspirasikan olehnya (seperti Peewee). Sistem tersebut menggunakan kelas Python untuk menentukan model, sedangkan Web2py menggunakan fungsi konstruktor seperti define_tableuntuk membuat contoh model. Perbedaannya akan terlihat mencolok hanya jika Anda terbiasa dengan cara lain; mereka seharusnya tidak mengganggu pendatang baru. Anda tidak akan mengalami masalah dengan menghubungkan Web2py ke penyedia data, karena Web2py berbicara ke hampir setiap database utama yang ada.

Fungsi terkait database yang benar-benar berguna di Web2py adalah kemampuan untuk menghasilkan diagram model, memungkinkan Anda untuk memvisualisasikan bagaimana model Anda berhubungan satu sama lain. Anda perlu menginstal pustaka PyGraphviz untuk mengaktifkan fitur itu.

Web2py memasok banyak komponen kelas profesional lainnya: fungsi internasionalisasi, beberapa metode cache, kontrol akses dan otorisasi, dan bahkan efek front-end (misalnya, pemilih tanggal dalam formulir) melalui dukungan terintegrasi untuk jQuery dan AJAX. Kait untuk middleware eksternal dan internal juga disertakan, meskipun Anda tidak diizinkan menggunakan middleware untuk menggantikan fungsi inti Web2py. Namun, belum ada penggunaan eksplisit fungsi asinkron Python di Web2py, meskipun ada penjadwal untuk menangani tugas yang berjalan lama. 

Tidak heran jika dokumentasi Web2py disebut sebagai "buku". Pertama, ini mencakup sejumlah besar materi di Web2py, Python, dan lingkungan penerapan yang digunakan untuk keduanya. Kedua, itu ditulis dengan gaya naratif yang sangat mudah diakses. Ketiga, membahas secara mendalam tentang skenario pembangunan aplikasi umum. Ada satu bab penuh, misalnya, tentang penggunaan jQuery untuk membangun aplikasi AJAX.

Weppy

Weppy terasa seperti tanda setengah jalan antara kesederhanaan minimal dari Flask dan kelengkapan Django. Sementara mengembangkan aplikasi Weppy memiliki keterusterangan Flash, Weppy hadir dengan banyak fitur yang ditemukan di Django, seperti lapisan data dan otentikasi. Karenanya, Weppy cocok untuk aplikasi yang berkisar dari yang sangat sederhana hingga yang sangat canggih.

Sekilas, kode Weppy sangat mirip dengan kode Flask atau kode Botol. Beberapa petunjuk diperlukan untuk mengaktifkan dan menjalankan situs web satu rute dasar. Rute dapat dijelaskan melalui dekorator fungsi (dengan cara yang mudah) atau secara terprogram, dan sintaks untuk melakukannya sangat dekat dengan Flask / Bottle. Templating bekerja hampir sama, selain variasi kecil dalam sintaksis.

Weppy kontras dengan kerangka kerja yang lebih kecil dengan memasukkan beberapa fitur yang mereka gabungkan hanya sebagai plug-in atau add-on. Misalnya, baik Flask maupun Bottle tidak memiliki ORM built-in atau sistem manajemen data. Weppy menyertakan ORM, meskipun didasarkan pada proyek pyDAL daripada SQLAlchemy yang jauh lebih populer. Weppy bahkan mendukung migrasi skema, yang didukung Django sebagai bagian dari ORM (sistem migrasi Django juga jauh lebih otomatis). Meskipun Weppy memiliki mekanisme ekstensi, daftar add-on yang disetujui secara resmi sangat kecil, jauh lebih kecil daripada katalog ekstensi untuk Flask.

Kerangka kerja yang lebih ringan seperti Weppy sering digunakan untuk membangun RESTful API, dan Weppy dilengkapi dengan fungsi kenyamanan untuk tujuan itu. Letakkan @servicedekorator pada rute, dan data yang Anda kembalikan secara otomatis diformat dalam JSON atau XML pilihan Anda.

Weppy menyertakan fitur lain yang tampak lebih sesuai dengan kerangka kerja yang lebih besar, tetapi diterapkan tanpa massal. Contohnya termasuk mekanisme validasi data, penanganan formulir, cache respons, dan validasi pengguna. Dalam semua kasus ini, Weppy mengambil pendekatan "cukup". Fitur-fitur yang disediakan tidak selengkap yang mungkin Anda temukan di Django dan kerangka kerja kelas berat lainnya, tetapi seorang pengembang tidak perlu menginvestasikan banyak pekerjaan untuk membuatnya berguna, dan mereka selalu dapat diperpanjang setelah fakta.

Fitur kerangka kerja kelas berat lainnya yang ditemukan di Weppy adalah dukungan internasionalisasi. String dalam template dapat diterjemahkan sesuai dengan file lokal yang disediakan dengan aplikasi, yang merupakan kamus Python sederhana. Pilihan bahasa juga dapat diatur dengan mengurai permintaan browser (yaitu, header HTTP Terima-Bahasa) atau dengan mengikat terjemahan ke rute tertentu.

Dokumentasi Weppy memiliki rasa yang sama dengan framework itu sendiri. Ini bersih, mudah dibaca, dan ditulis untuk dikonsumsi oleh manusia. Selain dari contoh "halo dunia" yang biasa, ini termasuk tutorial panduan bagus yang memungkinkan Anda membuat sistem mikroblog sebagai proyek awal.

Rencana jangka panjang untuk Weppy mencakup mendukung async dan soket sebagai entitas kelas satu tingkat rendah. Pengembang Weppy berencana untuk memperkenalkan fitur tersebut dalam versi 2.0, dan kemudian membutuhkan Python 3.7 atau yang lebih baik untuk semua versi Weppy yang akan datang.

Zope