5 rangka web Python yang besar dan hebat

Apabila anda membina bahagian belakang untuk laman web atau perkhidmatan, walaupun yang kelihatan sederhana pada pandangan pertama, anda mungkin akan dapati dengan pantas. Malah laman web "sederhana" ternyata menjadi kompleks kerumitan. Pengurusan pengguna, reka bentuk data, pengiriman formulir, keamanan, —melaksanakan semua itu dengan tangan menjadi membosankan.

Untuk projek web besar itu, apabila anda tahu bahawa anda akan memerlukan segalanya ditambah dengan sink dapur, sebaiknya beralih ke rangka yang disertakan dengan bateri (dan pengecas). Berikut adalah lima kerangka web berat untuk Python yang disertakan dengan semua yang anda perlukan untuk membina aplikasi web yang mantap dan kemudian beberapa.

CubicWeb

CubicWeb disebut sebagai "kerangka aplikasi web semantik yang menyokong penggunaan semula dan reka bentuk berorientasi objek." Ini adalah sistem yang menarik - seperti yang dicatat oleh Rick Grehan ketika dia mengulasnya kembali pada tahun 2011 - yang menekankan penggunaan abstraksi dan blok bangunan yang dapat digunakan kembali yang disebut "kubus." Sebenarnya, CubicWeb mungkin terlalu abstrak atau tidak spesifik bagi beberapa pembangun, dan kelajuan dan ciri pengembangannya ketinggalan kerangka kerja lain.

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. Sistem templat terbina dalam membolehkan anda menghasilkan output HTML secara terprogram. Anda juga dapat menggunakan kubus yang menyediakan alat untuk UI web, seperti itu untuk kerangka HTML Bootstrap.

Walaupun CubicWeb menyokong Python 3 (sejak versi 3.23), nampaknya ia 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. Anda juga boleh menjalankan tugas secara tidak segerak dengan kubus pekerja kubik. 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 dipisahkan untuk mengaitkan pelbagai sumber data.

Kerana CubicWeb mempunyai banyak kebergantungan, lebih baik digunakan pip installuntuk mengambil semuanya. Anda mungkin juga perlu melakukan penyesuaian manual pada persekitaran setempat. Ini berbeza dengan kerangka kerja lain di mana menjalankan pip installatau menjatuhkan kod kerangka ke subfolder projek lain adalah semua yang diperlukan. Atau anda boleh menggunakan bekas Docker untuk menjalankan sesuatu.

CubicWeb merujuk kepada dokumentasinya yang panjang sebagai "buku." Pengarang buku telah meluangkan masa untuk menjelaskan pendekatan CubicWeb yang tidak biasa, menunjukkan bagaimana untuk membina beberapa aplikasi asas, memasukkan rujukan API, dan secara umum berusaha keras untuk menjadi spesifik.

CubicWeb tetap dalam perkembangan, jika lambat, pengembangan. Rancangan untuk CubicWeb 4.0 telah dipertimbangkan sejak tahun 2012, tetapi belum ada garis masa yang ditawarkan untuk menyampaikannya.

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 setiap bateri yang anda perlukan, menjadikannya lebih sesuai untuk membina aplikasi besar daripada yang kecil.

Django menghabiskan bertahun-tahun duduk di versi 1.x. Ketika Django 2.0 tiba pada akhir 2017, kesalahan dengan Python 2 memihak Python 3.4 ke atas. Django 3.0, yang dikeluarkan pada bulan Disember 2019, memerlukan Python 3.6 atau lebih baik, dan menambah sokongan untuk standard ASGI asinkron baru untuk aplikasi web Python.

Bahagian penting dari daya tarik Django adalah kepantasan penggunaan. Kerana Django menyertakan 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 (mapper objek-relasional), pengesahan bentuk, perlindungan serangan, dan templat semuanya terbina dalam.

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 / log keluar, kebenaran pentadbir, dan sebagainya, Django memberikan ciri-ciri tersebut secara asli. Mereka dapat digunakan sebagaimana adanya atau diperluas untuk merangkumi kes penggunaan baru dengan pekerjaan minimum.

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 menghilangkan banyak masalah skrip lintas-laman web yang biasa. Sekiranya anda ingin melakukan pengesahan borang, anda boleh menggunakan semuanya dari perlindungan CSRF yang sederhana hingga mekanisme pengesahan bidang demi bidang yang lengkap yang memberikan maklum balas ralat terperinci.

Satu ciri yang kaya dan seluas Django tidak akan bagus tanpa dokumentasi yang kuat untuk menggunakannya. Dokumentasi Django melatih 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, penuh dengan banyak bahagian yang bergerak. Malah aplikasi Django yang sederhana memerlukan banyak konfigurasi untuk berjalan. Sekiranya matlamat anda adalah melakukan lebih dari sekadar menyiapkan 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 menembak anda secara tidak sengaja, tetapi kekangan itu boleh menjadi sangat membingungkan jika anda tidak bersedia untuknya. Walaupun terdapat jalan penyelesaian, mereka cenderung mempengaruhi prestasi.

Pada versi 3.0, Django telah menambahkan sokongan untuk pandangan tidak segerak. Malangnya, belum ada sokongan untuk async di bahagian lain dari stack Django, seperti ORM. Tetapi anda boleh menggunakan Django menggunakan ASGI untuk memanfaatkan pandangan async sepenuhnya.

Web2py

Dalam dunia pengaturcaraan Ruby, Ruby on Rails adalah kerangka web de facto. Profesor sains komputer Universiti DePaul Massimo Di Pierro diilhami oleh Rails untuk membuat kerangka web di Python yang juga senang disusun dan digunakan. 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 memuat turun kod sumbernya dan membangunnya. 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 membangun aplikasi Web2py, yang kemudian dapat digunakan di tempat lain jika diperlukan.

Antara muka web Web2py dibina dengan Bootstrap 4, jadi mudah dilihat dan senang dilayari. 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 shell Python, sehingga anda dapat berinteraksi dengan Web2py dari baris perintah — 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-sistem tersebut menggunakan kelas Python untuk menentukan model, sedangkan Web2py menggunakan fungsi-fungsi konstruktor seperti define_tablememberi contoh model. Perbezaannya mungkin hanya berlaku jika anda terbiasa dengan cara lain; mereka tidak seharusnya menggangu 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 sangat berguna dalam Web2py adalah keupayaan untuk menghasilkan gambarajah model, yang membolehkan anda 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, kaedah caching pelbagai, 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. Namun, belum ada penggunaan eksplisit fungsi async Python dalam Web2py, walaupun ada penjadwalan untuk menangani tugas yang sudah lama berjalan. 

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, mengenai penggunaan jQuery 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 seperti kod Flask atau kod 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 yang lebih kecil 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 bahkan menyokong migrasi skema, yang disokong oleh Django sebagai sebahagian daripada ORMnya (sistem migrasi Django juga 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 @servicepenghias 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 dilaksanakan tanpa pukal. Contohnya termasuk mekanisme pengesahan data, pengendalian borang, cache respons, dan pengesahan pengguna. Dalam semua kes ini, Weppy mengambil pendekatan "cukup". Ciri-ciri yang disediakan tidak lengkap seperti yang anda dapati di Django dan kerangka kerja kelas berat yang lain, tetapi pemaju tidak perlu melabur banyak kerja untuk menjadikannya berguna, dan mereka selalu dapat diperluas setelah fakta.

Satu lagi ciri rangka berat yang terdapat di Weppy adalah 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 "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.

Zope