Review: 13 kerangka web Python dibandingkan

Jika Anda sedang mengembangkan aplikasi web dan memilih Python sebagai bahasa untuk membuatnya, itu adalah langkah yang cerdas. Kematangan Python dalam pengembangan, pustaka yang kuat, dan luasnya adopsi di dunia nyata telah membantu membuatnya menjadi hal yang mudah untuk pengembangan web.

Sekarang sampai pada bagian yang sulit: Memilih salah satu dari banyak kerangka kerja web Python yang tersedia. Bukan hanya jumlahnya yang terus bertambah, tetapi mungkin sulit untuk menemukan yang paling sesuai dengan kasus penggunaan Anda. Jika Anda membangun REST API yang cepat dan kotor, Anda tidak perlu berada di dekat pipa ledeng dan kabel yang diperlukan untuk aplikasi yang dapat digunakan sepenuhnya oleh pengguna dengan login pengguna, validasi formulir, dan penanganan unggahan.

Video terkait: Membuat aplikasi web sederhana dengan Python dan Flask

Dalam ringkasan ini, kita akan memeriksa 13 kerangka web Python yang paling banyak digunakan. Kami akan mencatat jenis aplikasi web apa yang masing-masing paling cocok untuk dibangun dan melihat bagaimana mereka menumpuk satu sama lain di enam area ini:

Instalasi: Betapa mudah atau mudahnya untuk mengatur kerangka kerja — proyek yang tidak memerlukan instalasi formal (dapat dengan mudah dimasukkan ke dalam proyek yang sudah ada sebagai modul yang disertakan), memerlukan boilerplate minimal untuk memulai, atau datang dengan beberapa jenis dari penyiapan yang telah dikonfigurasikan mendapatkan poin ekstra.

Dokumentasi: Hampir setiap proyek Python yang layak memiliki dokumentasi yang berjalan melalui penyiapan, menggambarkan kasus penggunaan dasar, dan memberikan detail tentang API. Di sini, kami memberikan nilai lebih tinggi pada kerangka kerja yang menunjukkan cara membuat seluruh aplikasi sebagai bagian dari tutorial, menyertakan resep umum atau pola desain, dan sebaliknya melampaui dan melampaui panggilan tugas (seperti dengan memberikan detail tentang cara menjalankan kerangka kerja di bawah varian Python seperti PyPy atau IronPython).

Manajemen: Ini adalah skor relatif, yang menunjukkan berapa banyak pekerjaan yang diperlukan untuk mengkonfigurasi dan memelihara kerangka kerja. Kerangka minimal mendapat skor lebih tinggi di sini secara default.

Kemampuan asli: Berapa banyak baterai yang disertakan? Skor yang lebih tinggi diberikan ke framework yang memberikan dukungan native untuk internasionalisasi, template HTML, dan lapisan akses data. Poin juga masuk ke kerangka kerja yang menggunakan dukungan asli Python yang baru-baru ini diperkenalkan untuk operasi I / O asinkron.

Keamanan: Kerangka kerja yang menyediakan langkah-langkah keamanan asli seperti perlindungan pemalsuan permintaan lintas situs (CSRF) dan manajemen sesi dengan cookie terenkripsi mendapatkan nilai lebih tinggi.

Skalabilitas: Sebagian besar kerangka kerja Python dapat menggunakan proyek seperti Gevent atau Gunicorn untuk berjalan dalam skala besar. Di sini, kami melihat fitur asli kerangka kerja yang mempromosikan skalabilitas, seperti keluaran dan cache fragmen halaman.

Jika Anda penasaran dengan tolok ukur kinerja, lihat rangkaian uji coba TechEmpower yang sedang berlangsung, yang membandingkan beberapa kerangka kerja web di berbagai tugas, dengan kode dan metodologi yang diposkan ke GitHub dan menjalani penilaian ulang terus-menerus. Tidak semua kerangka kerja dalam diskusi ini dianalisis di sana, tetapi Anda dapat memahami kerangka kerja mana yang berkinerja terbaik pada jenis beban apa.

Kami akan melihat 13 kerangka secara keseluruhan. Lima di antaranya — CubicWeb, Django, Web2py, Weppy, dan Zope2 — mengambil pendekatan "bak cuci piring", mengemas hampir semua fitur yang dapat Anda bayangkan membutuhkan aplikasi web. Delapan kerangka kerja yang tersisa — Bottle, CherryPy, Falcon, Flask, Pyramid, Tornado, Web.py, dan Wheezy.web — menawarkan pengambilan yang lebih minimalis, memperdagangkan massal, dan kelengkapan untuk kesederhanaan dan kemudahan.

Mari kita mulai dengan kelas berat.

Kerangka web Python kelas berat

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 melihatnya di tahun 2011 — yang menekankan penggunaan abstraksi dan blok penyusun kode yang dapat digunakan kembali yang disebut "kubus", tetapi mungkin terlalu abstrak atau istimewa bagi beberapa pengembang.

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.

CubicWeb tampaknya 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. 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. Namun saat diterapkan, dengan membuat kueri sebagai string secara manual, kemungkinan akan terasa kuno bagi pengembang yang terbiasa dengan ORM.

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

Masalah potensial lainnya adalah tidak adanya mesin templat asli; menghasilkan HTML diserahkan kepada pengembang. Anda dapat mengatasinya dengan menggunakan sistem kerangka pihak ketiga seperti Jinja2 atau memilih kubus yang menyediakan alat untuk UI Web, seperti kerangka kerja Boostrap HTML.

Satu masalah lama dengan CubicWeb - kurangnya dukungan Python 3 - telah diselesaikan. Pada Juni 2016 dan versi 3.23, dukungan Python 3 mendarat di CubicWeb, kecuali untuk modul seperti Twisted yang tidak sepenuhnya porting.

Seperti Web2py, CubicWeb mengacu pada dokumentasinya yang panjang sebagai "buku". Perlu waktu untuk menjelaskan pendekatan CubicWeb yang tidak biasa, mendemonstrasikan bagaimana membangun beberapa aplikasi dasar, termasuk referensi API, dan secara umum berusaha untuk lebih spesifik.

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, jadi ini lebih condong ke arah pembuatan aplikasi besar daripada yang kecil.

Video terkait: Membuat situs web sederhana dengan Django

Setelah bertahun-tahun duduk di versi 1.x, Django baru-baru ini membuat versi melonjak ke kiri koma desimal. Perubahan terbesar dalam Django 2.0 adalah kerangka sekarang hanya bekerja dengan Python 3.4 dan yang lebih baru. Idealnya, Anda tetap harus menggunakan Python 3.x, jadi satu-satunya alasan untuk menggunakan cabang 1.x Django adalah jika Anda terjebak dengan versi lama Python.

Bagian penting dari seruan Django adalah kecepatan penyebaran. Karena ini mencakup begitu banyak bagian yang Anda butuhkan untuk mengembangkan aplikasi web biasa, Anda dapat bergerak dengan cepat. Perutean, penguraian URL, konektivitas database (termasuk ORM), validasi formulir, perlindungan serangan, dan pembuatan template semuanya sudah 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. Alih-alih harus membuat sistem Anda sendiri untuk melacak akun pengguna, sesi, kata sandi, masuk / keluar, izin admin, dan seterusnya, Django mempunyai fitur-fitur aslinya. Mereka dapat digunakan apa adanya atau diperluas untuk mencakup kasus penggunaan baru dengan jumlah pekerjaan yang minimal.

zope.formlib 1. Inti adalah BSD; beberapa komponen LGPLv3. 2. Tersedia melalui; dipasang secara terpisah tetapi didukung sebagai bagian dari proyek. 3. Tersedia melalui ekstensi pihak ketiga.
  CubicWeb Django Web2py Weppy Zope2
Lisensi LGPL BSD LGPLv3 BSD / LGPLv3 [1] Lisensi Publik Zope
Sistem template HTML asli Iya Iya Iya Iya Iya
ORM asli / manajemen data Iya Iya Iya Iya Iya
Pustaka ekstensi Iya Iya Iya Iya Iya
Validasi formulir Iya Iya Iya Iya Ya [2]
Perlindungan pemalsuan permintaan lintas situs Iya Iya Iya Iya Iya
Manajemen pengguna / akses berbasis peran Iya Iya Iya Iya Iya
Dukungan Python 3 Iya Iya Tidak Iya Tidak
Migrasi skema untuk model data Iya Iya Iya Iya Tidak
Cache respons Tidak Iya Iya Iya Iya
Dukungan internasionalisasi Iya Iya Iya Iya Iya
Dukungan Native WebSockets Tidak Nomor 3] Iya Tidak Tidak
Lingkungan pengembangan interaktif Iya Tidak Iya Tidak Iya

Django memiliki 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 sebagai aman. Ini dengan sendirinya mengurangi banyak masalah skrip lintas situs yang umum. 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. Situs dokumentasi Django meneliti 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, dengan banyak bagian yang bergerak. Bahkan aplikasi Django sederhana dengan hanya beberapa rute memerlukan cukup banyak konfigurasi untuk dapat dijalankan. Jika tugas Anda adalah melakukan tidak 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 melakukan hal-hal buruk, tetapi batasan itu dapat mengganggu jika Anda tidak siap untuk itu. Meskipun ada beberapa solusi, solusi tersebut cenderung memengaruhi kinerja.

Inti Django adalah sinkron. Bagaimanapun, satu cara untuk menambahkan perilaku async adalah melalui proyek Saluran Django. Proyek ini, add-on resmi Django, menambahkan penanganan asinkron untuk koneksi dan soket ke Django, sambil mempertahankan idiom pemrograman Django.

Web2py

Di dunia 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 sama mudahnya untuk disiapkan 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 hanya dengan mengunduh kode sumbernya dan menggunakannya. Tetapi untuk pengguna yang kurang teknis di Windows atau MacOS, pembuat Web2py menawarkan versi yang pada dasarnya adalah server mandiri. Unduh, buka paket, dan jalankan salah satu versi ini, dan Anda akan memiliki server web lokal dengan salinan Web2py yang sudah 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 2.16.1, 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 jika diperlukan — 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, di mana di Web2py Anda menggunakan fungsi konstruktor seperti define_tableuntuk membuat contoh model. Sebagian besar perbedaan tersebut mungkin hanya mengganggu orang-orang yang sudah memiliki pengalaman dengan satu dan mulai menggunakan yang lain; mereka sama rumitnya dengan 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 adalah kemampuan untuk menghasilkan diagram model, lebih baik 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 metodologi 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.

Salah satu batasan signifikan Web2py adalah kompatibel dengan Python 2.x saja. Pertama, ini berarti Web2py tidak dapat menggunakan sintaks asinkron Python 3. Untuk dua, jika Anda mengandalkan pustaka eksternal yang eksklusif untuk Python 3, maka Anda kurang beruntung. Namun, pekerjaan sedang dilakukan untuk membuat Web2py Python 3 kompatibel, dan itu hampir selesai pada tulisan ini.

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 (dibundel dengan Web2Py) 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 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 lainnya 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 ORMnya (juga, sistem migrasi Django 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 @service decorator pada sebuah 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. Contoh: Mekanisme validasi data, penanganan formulir, cache respons, dan validasi pengguna. Dalam semua kasus ini, Weppy mengambil pendekatan "cukup". Fitur yang disediakan tidak selengkap yang mungkin Anda temukan dalam kerangka berukuran Django, tetapi seorang pengembang tidak perlu menginvestasikan banyak pekerjaan untuk membuatnya berguna, dan mereka selalu dapat diperpanjang setelah fakta.

Fitur lain yang ditemukan di Weppy yang biasanya dikaitkan dengan kerangka kerja yang lebih berat 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 aplikasi “hello world” yang biasa, aplikasi ini juga menyertakan 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.

Kartu catatan angka Kemampuan asli (20%) Manajemen (20%) Instalasi (20%) Dokumentasi (20%) Keamanan (10%) Skalabilitas (10%) Skor Keseluruhan (100%)
Botol 0.12 8 10 10 8 7 7 8.6
CherryPy 17.0.0.0 7 9 9 9 8 8 8.4
CubicWeb 3.26.4 10 8 7 10 9 7 8.6
Django 2.1.0 10 8 8 10 10 10 9.2
Falcon 1.4.1.0 7 10 8 8 7 7 8.0
Flask 1.0.2 8 9 8 9 8 8 8.4
Piramida 1.9.2 8 8 8 10 9 7 8.4
Tornado 4.3 8 9 9 8 8 7 8.3
Web.py 0.39 8 8 10 8 9 8 8.5
Web2py 2.16.1 10 9 7 10 9 8 8.9
Weppy 1.2.11.0 10 8 9 9 10 9 9.1
Wheezy.web 0.1.485 9 9 8 8 8 8 8.4
Zope2 2.13.24 10 8 7 9 9 9 8.6