Ulasan: 13 kerangka web Python dibandingkan

Sekiranya anda mengembangkan aplikasi web dan anda memilih Python sebagai bahasa untuk membuatnya, itu adalah langkah yang bijak. Kematangan pembangunan Python, perpustakaan yang mantap, dan luasnya adopsi dunia nyata telah menjadikannya tidak perlu dipertimbangkan untuk pembangunan web.

Sekarang datang bahagian yang sukar: Memilih salah satu daripada banyak kerangka web Python yang ada. Bukan sahaja bilangannya terus bertambah, tetapi sukar untuk mencari nombor yang paling sesuai dengan kes penggunaan anda. Sekiranya anda membina REST API cepat dan kotor, anda tidak memerlukan tempat berhampiran paip dan pendawaian yang diperlukan untuk aplikasi penuh pengguna dengan log masuk pengguna, pengesahan borang, dan pengendalian muat naik.

Video berkaitan: Membuat aplikasi web mudah dengan Python dan Flask

Dalam perbincangan ini, kami akan mengkaji 13 kerangka web Python yang paling banyak digunakan. Kami akan perhatikan jenis aplikasi web yang paling sesuai untuk dibina dan melihat bagaimana mereka saling bersatu di enam bidang ini:

Pemasangan: Betapa mudah atau mudahnya untuk menyusun kerangka kerja - projek yang tidak memerlukan pemasangan formal (ia hanya boleh dimasukkan ke dalam projek yang ada sebagai modul yang disertakan), memerlukan plat boiler minimum untuk memulakan, atau hadir dengan beberapa jenis dari persediaan yang telah dikonfigurasi mendapatkan mata tambahan.

Dokumentasi: Hampir setiap projek Python yang layak mempunyai dokumentasi yang melalui penyiapan, menggambarkan kes penggunaan asas, dan memberikan perincian mengenai API. Di sini, kami memberikan markah yang lebih tinggi untuk kerangka kerja yang menunjukkan cara membuat keseluruhan aplikasi sebagai sebahagian daripada tutorial, termasuk resipi biasa atau corak reka bentuk, dan sebaliknya melampaui panggilan tugas (seperti dengan memberikan perincian tentang cara menjalankan rangka kerja di bawah varian Python seperti PyPy atau IronPython).

Pengurusan: Ini adalah skor relatif, menunjukkan berapa banyak kerja yang diperlukan untuk mengkonfigurasi dan mengekalkan kerangka kerja. Skor kerangka minimum lebih tinggi di sini secara lalai.

Keupayaan asli: Berapa banyak bateri yang disertakan? Skor yang lebih tinggi masuk ke kerangka kerja yang memberikan sokongan asli untuk pengantarabangsaan, templat HTML, dan lapisan akses data. Titik juga menuju ke kerangka kerja yang menggunakan sokongan asli Python yang diperkenalkan baru-baru ini untuk operasi I / O asinkron.

Keselamatan: Kerangka kerja yang menyediakan langkah-langkah keselamatan asli seperti perlindungan pemalsuan permintaan lintas tapak (CSRF) dan pengurusan sesi dengan kuki yang disulitkan mendapat markah yang lebih tinggi.

Skalabiliti: Sebilangan besar kerangka kerja Python dapat menggunakan projek seperti Gevent atau Gunicorn untuk dijalankan pada skala besar. Di sini, kami melihat ciri-ciri asli kerangka yang mempromosikan skalabilitas, seperti output dan cache halaman-fragmen.

Sekiranya anda ingin tahu tentang penanda aras prestasi, lihat siri percubaan TechEmpower yang sedang berlangsung, yang membandingkan pelbagai kerangka web di pelbagai tugas, dengan kod dan metodologi yang diposkan ke GitHub dan dikenakan penilaian berterusan. Tidak semua kerangka dalam perbincangan ini dianalisis di sana, tetapi ada kemungkinan untuk mengetahui kerangka kerja mana yang berkinerja terbaik dalam jenis beban apa.

Kami akan melihat 13 kerangka kerja secara keseluruhan. Lima daripadanya — CubicWeb, Django, Web2py, Weppy, dan Zope2 — menggunakan pendekatan “kitchen sink”, mengemas hampir semua ciri yang anda bayangkan memerlukan aplikasi web. Baki lapan kerangka kerja — Botol, CherryPy, Falcon, Flask, Piramid, Tornado, Web.py, dan Wheezy.web — menawarkan pengambilan, perdagangan pukal dan kelengkapan yang lebih minimalis untuk kesederhanaan dan kemudahan.

Mari mulakan dengan kelas berat.

Kerangka web Python Berat

CubicWeb

CubicWeb disebut sebagai "kerangka aplikasi web semantik yang menyokong penggunaan semula dan reka bentuk berorientasi objek." Ini adalah sistem yang menarik — seperti yang diperhatikan oleh Rick Grehan ketika melihatnya kembali pada tahun 2011 — yang menekankan penggunaan abstraksi dan blok bangunan kod yang boleh digunakan semula yang disebut “kubus”, tetapi mungkin terlalu abstrak atau idiosinkratik bagi beberapa pembangun.

Kiub adalah komponen perisian yang menampilkan skema (model data), entiti (logik pengaturcaraan), dan pandangan. Dengan memasang beberapa kubus, masing-masing melakukan tugasnya sendiri, anda dapat menyusun aplikasi perisian dengan menggunakan kembali kod anda sendiri dan kod yang lain.

Pada dasarnya, CubicWeb menyediakan perancah asas yang digunakan oleh setiap aplikasi web: "repositori" untuk sambungan data dan penyimpanan; "mesin web" untuk permintaan / respons HTTP asas dan tindakan CRUD; dan skema pemodelan data. Semua ini dijelaskan dalam definisi kelas Python. Untuk mengatur dan mengurus contoh CubicWeb, anda menggunakan alat baris perintah yang serupa dengan yang digunakan untuk Django.

CubicWeb nampaknya tidak menggunakan fungsi async asli Python 3. Cara bulat untuk memasukkan async adalah dengan menggunakan modul cubicweb.pyramid untuk menggunakan kerangka Piramid sebagai pelayan web, dan menggunakan garpu Pyramid yang menggunakan pembinaan async. Tetapi apa-apa yang lebih mudah nampaknya tidak dapat dicapai buat masa ini.

Untuk mengambil atau memanipulasi data berterusan dalam aplikasi CubicWeb, anda menggunakan Relation Query Language (RQL), yang menggunakan sintaks samar-samar seperti SQL tetapi berpola mengikut SparQL W3C. Justifikasi CubicWeb untuk ini adalah, abstraksi: RQL menyediakan laluan yang sangat terputus untuk menghubungkan pelbagai sumber data. Tetapi semasa dilaksanakan, dengan membina pertanyaan secara manual sebagai rentetan, kemungkinan akan terasa kuno kepada pembangun yang terbiasa dengan ORM.

Terdapat halangan lain untuk menggunakan CubicWeb. Untuk satu, persediaan boleh menjadi kerumitan. Kerana CubicWeb mempunyai banyak kebergantungan, lebih baik digunakan pip installuntuk mengambil semuanya. Anda mungkin juga perlu melakukan penyesuaian manual pada persekitaran setempat. Ini sangat berbeza dengan kerangka kerja lain di mana menjalankan pip installatau menjatuhkan kod kerangka ke subfolder projek lain adalah semua yang diperlukan.

Isu lain yang berpotensi adalah ketiadaan mesin templat asli; menghasilkan HTML diserahkan kepada pembangun. Anda dapat mengatasinya dengan menggunakan sistem templat pihak ketiga seperti Jinja2 atau memilih kubus yang menyediakan alat untuk UI Web, seperti untuk rangka kerja Boostrap HTML.

Satu masalah lama dengan CubicWeb - kekurangan sokongan Python 3 - telah diselesaikan. Pada bulan Jun 2016 dan versi 3.23, sokongan Python 3 telah tiba di CubicWeb, kecuali modul seperti Twisted yang tidak disalurkan sepenuhnya.

Seperti Web2py, CubicWeb merujuk kepada dokumentasinya yang panjang sebagai "buku." Ia memerlukan masa untuk menjelaskan pendekatan CubicWeb yang tidak biasa, menunjukkan bagaimana membuat beberapa aplikasi asas, merangkumi rujukan API, dan secara umum tidak mungkin menjadi spesifik.

Django

Dalam dekad 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 bateri yang anda perlukan, jadi lebih banyak menggunakan aplikasi besar daripada yang kecil.

Video berkaitan: Membuat laman web sederhana dengan Django

Setelah bertahun-tahun duduk di versi 1.x, Django baru-baru ini membuat versi lebam di sebelah kiri titik perpuluhan. Perubahan terbesar dalam Django 2.0 adalah bahawa kerangka kerja sekarang hanya berfungsi dengan Python 3.4 ke atas. Sebaiknya, anda harus menggunakan Python 3.x pula, jadi satu-satunya sebab untuk menggunakan cabang 1.x Django adalah jika anda terjebak dengan versi lama Python.

Bahagian penting dari daya tarik Django adalah kepantasan penggunaan. Kerana merangkumi begitu banyak kepingan yang anda perlukan untuk mengembangkan aplikasi web rata-rata, anda dapat bergerak dengan cepat. Perutean, penghuraian URL, penyambungan pangkalan data (termasuk ORM), pengesahan borang, perlindungan serangan, dan templat semuanya sudah terpasang di dalamnya.

Anda akan menemui blok bangunan untuk senario aplikasi web yang paling biasa. Pengurusan pengguna, misalnya, terdapat di kebanyakan laman web, jadi Django menawarkannya sebagai elemen standard. Daripada harus membuat sistem anda sendiri untuk melacak akaun pengguna, sesi, kata laluan, log masuk / logout, kebenaran pentadbir, dan sebagainya, Django mempunyai ciri-ciri tersebut secara asli. Mereka dapat digunakan sebagaimana adanya atau diperluas untuk merangkumi kes penggunaan baru dengan jumlah pekerjaan minimum.

zope.formlib 1. Teras adalah BSD; beberapa komponen LGPLv3. 2. Terdapat melalui; dipasang secara berasingan tetapi disokong sebagai sebahagian daripada projek. 3. Tersedia melalui pelanjutan pihak ketiga.
  CubicWeb Django Web2py Weppy Zope2
Lesen LGPL BSD LGPLv3 BSD / LGPLv3 [1] Lesen Awam Zope
Sistem templat HTML asli Ya Ya Ya Ya Ya
ORM asli / pengurusan data Ya Ya Ya Ya Ya
Perpustakaan sambungan Ya Ya Ya Ya Ya
Pengesahan borang Ya Ya Ya Ya Ya [2]
Permintaan perlindungan silang di lokasi Ya Ya Ya Ya Ya
Akses pengguna berdasarkan akses / peranan Ya Ya Ya Ya Ya
Sokongan Python 3 Ya Ya Tidak Ya Tidak
Migrasi skema untuk model data Ya Ya Ya Ya Tidak
Cache respons Tidak Ya Ya Ya Ya
Sokongan pengantarabangsaan Ya Ya Ya Ya Ya
Sokongan WebSockets asli Tidak Tidak [3] Ya Tidak Tidak
Persekitaran pembangunan interaktif Ya Tidak Ya Tidak Ya

Django mempunyai default yang waras dan selamat yang membantu melindungi aplikasi web anda dari serangan. Apabila anda meletakkan pemboleh ubah dalam templat halaman, seperti rentetan dengan HTML atau JavaScript, kandungannya tidak diberikan secara harfiah melainkan anda secara jelas menetapkan contoh pemboleh ubah sebagai selamat. Ini dengan sendirinya mengurangkan banyak masalah skrip lintas tapak yang biasa. Sekiranya anda ingin melakukan pengesahan borang, anda boleh menggunakan segalanya dari perlindungan CSRF sederhana hingga mekanisme pengesahan bidang demi bidang yang lengkap yang memberikan maklum balas ralat terperinci.

Satu ciri yang kaya dan seluas Django tidak akan lebih baik tanpa dokumentasi yang kuat untuk menggunakannya. Laman dokumentasi Django meneliti setiap aspek kerangka dari pelbagai sudut. Bekerja dengan Python 3 atau citarasa bahasa yang lain, melakukan keselamatan dengan betul, melaksanakan komponen aplikasi web biasa (seperti sesi atau penomboran), menghasilkan peta laman - semuanya diliputi. API untuk setiap lapisan aplikasi — model, tampilan, dan templat — dijelaskan secara terperinci juga.

Namun, dengan kekuatan yang hebat, terdapat kerumitan yang luar biasa. Aplikasi Django memiliki reputasi sebagai top-heavy, dengan banyak bahagian yang bergerak. Malah aplikasi Django yang sederhana dengan hanya beberapa laluan memerlukan sedikit konfigurasi untuk berjalan. Sekiranya tugas anda tidak melakukan apa-apa selain daripada menyediakan beberapa titik akhir REST yang sederhana, Django hampir pasti berlebihan.

Django juga mempunyai kebiasaannya. Sebagai contoh, templat halaman tidak dapat menggunakan callable. Contoh: Anda boleh lulus {{user.name}}sebagai komponen dalam templat, tetapi tidak {{user.get_name()}}. Ini adalah salah satu cara Django memastikan templat tidak sengaja melakukan perkara-perkara jahat, tetapi kekangan itu boleh menjadi sangat membingungkan jika anda tidak bersedia untuknya. Walaupun terdapat jalan penyelesaian, mereka cenderung mempengaruhi prestasi.

Inti Django segerak. Walau bagaimanapun, salah satu cara untuk menambahkan tingkah laku async adalah dengan projek Django Channels. Projek ini, tambahan Django rasmi, menambah pengendalian async untuk sambungan dan soket ke Django, sambil mengekalkan idiom pengaturcaraan Django.

Web2py

Di dunia Ruby, Ruby on Rails adalah kerangka web de facto. Profesor sains komputer Universiti DePaul Massimo Di Pierro diilhamkan oleh Rails untuk membuat kerangka web di Python yang juga senang disiapkan dan dikerjakan. Hasilnya adalah Web2py.

Tarikan terbesar Web2py adalah persekitaran pembangunannya yang terbina dalam. Semasa anda menyediakan contoh Web2py, anda disediakan dengan antara muka web, pada dasarnya penyunting aplikasi Python dalam talian, di mana anda dapat mengkonfigurasi komponen aplikasi. Ini biasanya bermaksud membuat model, pandangan, dan pengawal, masing-masing dijelaskan melalui modul Python atau templat HTML. Beberapa contoh aplikasi hadir dengan Web2py di luar kotak. Anda boleh membezakannya untuk melihat cara kerjanya atau memanfaatkannya sebagai templat permulaan untuk membuat aplikasi anda sendiri.

Pembangun biasanya menggunakan Web2py dengan hanya memuat turun kod sumbernya dan menggunakannya. Tetapi bagi pengguna yang kurang teknikal pada Windows atau MacOS, pencipta Web2py menawarkan versi yang pada dasarnya adalah pelayan yang berdiri sendiri. Muat turun, bongkar, dan jalankan salah satu versi ini, dan anda akan mempunyai pelayan web tempatan dengan salinan Web2py yang telah dikonfigurasi terlebih dahulu. Ini adalah cara yang baik untuk memulai membuat aplikasi Web2py, yang kemudian dapat digunakan di tempat lain mengikut keperluan.

Antara muka web Web2py dibina dengan Bootstrap 2.16.1, jadi senang di mata dan mudah dinavigasi. Penyunting dalam penyemak imbas bukan pengganti IDE yang lengkap, tetapi dilengkapi dengan alat bantu seperti penomboran baris dan penyorotan sintaks Python (termasuk lekukan automatik). Juga disertakan antaramuka web yang cepat ke cengkerang Python, sehingga anda dapat berinteraksi dengan Web2py dari baris perintah jika diperlukan — konsesi yang bagus untuk para pakar.

Sistem pengambilan data yang digunakan dalam Web2py berfungsi sedikit berbeza dengan ORM Django dan ORM lain yang diilhamkan olehnya (seperti Peewee). Sistem tersebut menggunakan kelas Python untuk menentukan model, di mana di Web2py anda menggunakan fungsi konstruktor seperti define_tablememberi contoh model. Sebilangan besar perbezaan tersebut mungkin hanya berlaku kepada orang yang sudah berpengalaman dengannya dan mula menggunakan yang lain; mereka sama kompleks dengan pendatang baru. Anda tidak mungkin menghadapi masalah dengan menghubungkan Web2py ke penyedia data, kerana ia berbicara dengan hampir semua pangkalan data utama yang ada.

Fungsi yang berkaitan dengan pangkalan data yang benar-benar berguna adalah keupayaan untuk menghasilkan gambarajah model, lebih baik untuk menggambarkan bagaimana model anda saling berkaitan. Anda perlu memasang pustaka pygraphviz untuk mengaktifkan ciri itu.

Web2py membekalkan banyak komponen kelas profesional yang lain: fungsi pengantarabangsaan, pelbagai metodologi caching, kawalan akses dan kebenaran, dan bahkan kesan front-end (misalnya, pemilih tarikh dalam bentuk) melalui sokongan bersepadu untuk jQuery dan AJAX. Cangkuk untuk perisian tengah luaran dan dalaman juga disertakan, walaupun Anda tidak dibenarkan menggunakan alat tengah untuk menggantikan fungsi inti Web2py.

Satu had ketara Web2py adalah bahawa ia serasi dengan Python 2.x sahaja. Pertama, ini bermaksud Web2py tidak dapat menggunakan sintaks async Python 3. Untuk dua orang, jika anda bergantung pada perpustakaan luaran yang eksklusif untuk Python 3, maka anda tidak bernasib baik. Walau bagaimanapun, usaha sedang dijalankan untuk menjadikan Web2py Python 3 sesuai, dan ia hampir selesai pada penulisan ini.

Tidak hairanlah bahawa dokumentasi Web2py disebut sebagai "buku." Pertama, ia merangkumi jumlah bahan yang mengejutkan di Web2py, Python, dan persekitaran penyebaran yang digunakan untuk kedua-duanya. Kedua, ditulis dengan gaya naratif yang sangat mudah diakses. Ketiga, ia membincangkan secara mendalam mengenai senario pembinaan aplikasi biasa. Terdapat keseluruhan bab, misalnya, tentang menggunakan jQuery (digabungkan dengan Web2Py) untuk membina aplikasi AJAX.

Weppy

Weppy terasa seperti tanda tengah antara kesederhanaan minimum Flask dan kelengkapan Django. Semasa mengembangkan aplikasi Weppy memiliki keunggulan Flash, Weppy hadir dengan banyak fitur yang terdapat di Django, seperti lapisan data dan pengesahan. Oleh itu, Weppy sesuai untuk aplikasi yang terdiri dari sangat sederhana hingga sederhana.

Pada pandangan pertama, kod Weppy kelihatan hebat seperti kod Flask atau Botol. Sedikit arahan diperlukan untuk membina laman web satu laluan asas dan berjalan. Laluan dapat dijelaskan melalui penghias fungsi (cara mudah) atau secara terprogram, dan sintaks untuk melakukannya dekat dengan Flask / Botol. Templat berfungsi sama, selain daripada variasi kecil dalam sintaks.

Weppy berbeza dengan kerangka kerja lain dengan memasukkan beberapa ciri yang mereka gabungkan hanya sebagai pemalam atau tambahan. Sebagai contoh, Flask atau Botol tidak mempunyai ORM bawaan atau sistem pengurusan data. Weppy merangkumi ORM, walaupun berdasarkan projek pyDAL dan bukannya SQLAlchemy yang jauh lebih popular. Weppy malah menyokong migrasi skema, yang disokong oleh Django sebagai sebahagian daripada ORMnya (juga, sistem migrasi Django jauh lebih automatik). Walaupun Weppy mempunyai mekanisme peluasan, senarai tambahan yang diluluskan secara rasmi sangat kecil, jauh lebih kecil daripada katalog sambungan untuk Flask.

Rangka kerja yang lebih ringan seperti Weppy sering digunakan untuk membangun API RESTful, dan Weppy dilengkapi dengan fungsi kemudahan untuk tujuan tersebut. Letakkan penghias @ perkhidmatan di laluan, dan data yang anda kembalikan diformat secara automatik dalam JSON atau XML pilihan anda.

Weppy merangkumi ciri lain yang kelihatan lebih sesuai dengan rangka kerja yang lebih besar, tetapi ia dilaksanakan tanpa pukal. Contoh: Mekanisme pengesahan data, pengendalian borang, cache respons, dan pengesahan pengguna. Dalam semua kes ini, Weppy mengambil pendekatan "cukup". Ciri-ciri yang diberikan tidak lengkap seperti yang anda dapati dalam kerangka bersaiz Django, tetapi pemaju tidak perlu melabur banyak kerja untuk membuatnya berguna, dan mereka selalu dapat diperluas setelah fakta.

Ciri lain yang terdapat di Weppy biasanya dikaitkan dengan rangka kerja yang lebih berat ialah sokongan pengantarabangsaan. String dalam templat dapat diterjemahkan mengikut fail lokal yang disediakan dengan aplikasi, yang merupakan kamus Python yang sederhana. Pilihan bahasa juga dapat diatur dengan menguraikan permintaan penyemak imbas (yaitu, tajuk HTTP Accept-Language) atau dengan mengikat terjemahan ke rute tertentu.

Dokumentasi Weppy mempunyai rasa yang sama dengan kerangka itu sendiri. Ia bersih, mudah dibaca, dan ditulis untuk dimakan oleh manusia. Selain dari contoh aplikasi "hello world" yang biasa, ini termasuk tutorial panduan yang bagus yang membolehkan anda membuat sistem microblogging sebagai projek permulaan.

Rancangan jangka panjang untuk Weppy termasuk menyokong async dan soket sebagai entiti kelas pertama peringkat rendah. Pembangun Weppy merancang untuk memperkenalkan ciri-ciri tersebut dalam versi 2.0, dan kemudian memerlukan Python 3.7 atau lebih baik untuk semua versi Weppy yang akan datang.

Kad Markah Keupayaan asli (20%) Pengurusan (20%) Pemasangan (20%) Dokumentasi (20%) Keselamatan (10%) Skalabiliti (10%) Skor Keseluruhan (100%)
Botol 0.12 8 10 10 8 7 7 8.6
CherryPy 17.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 10 8 8 10 10 10 9.2
Falcon 1.4.1 7 10 8 8 7 7 8.0
Kelalang 1.0.2 8 9 8 9 8 8 8.4
Piramid 1.9.2 8 8 8 10 9 7 8.4
Puting beliung 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 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