8 kerangka web Python kecil yang hebat

Kenyamanan dan keserbagunaan Python berarti digunakan untuk membangun perangkat lunak di hampir setiap lapisan kehidupan TI. Salah satu ceruk utama adalah layanan web, di mana kecepatan pengembangan Python dan metafora fleksibel membuatnya mudah untuk membuat dan menjalankan situs web dengan cepat.

Dan seperti yang bisa Anda tebak, Python memberi Anda banyak pilihan dan kebebasan dalam kerangka web, baik kecil maupun besar. Lagipula, tidak semua proyek web harus berskala perusahaan. Sebagian besar harus cukup besar untuk menyelesaikan pekerjaan, dan tidak lebih besar. Artikel ini mensurvei delapan framework Python paling terkenal yang menekankan pada kesederhanaan, pengiriman ringan, dan fokus yang ketat.

Botol

Botol bisa dianggap semacam labu mini, karena lebih ringkas dan ringkas daripada "kerangka mikro" lainnya. Karena tapaknya yang minimal, Bottle sangat ideal untuk disertakan dalam proyek lain atau untuk mengirimkan proyek kecil dengan cepat seperti REST API. (Flask dibahas di bawah.) 

Seluruh basis kode untuk Bottle cocok dengan satu file dan sama sekali tidak memiliki dependensi eksternal. Meski begitu, Bottle dilengkapi dengan fungsionalitas yang cukup untuk membangun jenis aplikasi web yang umum tanpa bergantung pada bantuan dari luar.

Sistem perutean di Bottle, yang memetakan URL ke fungsi, memiliki sintaks yang hampir persis sama dengan Flask. Anda juga tidak terbatas pada serangkaian jalur terprogram; Anda dapat membuatnya secara dinamis. Data permintaan dan respons, cookie, variabel kueri, data formulir dari tindakan POST, header HTTP, dan unggahan file semuanya dapat diakses dan dimanipulasi melalui objek di Bottle.

Setiap kapabilitas telah diimplementasikan dengan memperhatikan detail. Dengan unggahan file, misalnya, Anda tidak perlu mengganti nama file jika konvensi penamaannya bentrok dengan sistem file target (seperti garis miring pada nama di Windows). Botol bisa melakukannya untuk Anda.

Bottle menyertakan mesin template HTML sederhana miliknya sendiri. Sekali lagi, meski minimal, mesin templating memiliki semua hal penting. Variabel yang disertakan dalam template dirender dengan HTML yang aman secara default; Anda harus menunjukkan variabel mana yang aman untuk direproduksi secara harfiah. Jika Anda lebih suka menukar mesin templat Bottle dengan yang lain, seperti Jinja2, Bottle memungkinkan Anda melakukannya tanpa repot. Saya lebih suka sistem templat sederhana yang dibundel dengan Bottle; cepat, sintaksnya sederhana, dan memungkinkan Anda untuk mencampurkan kode dan teks template tanpa kesulitan yang tidak semestinya.

Bottle bahkan mendukung beberapa back end server. Muncul dengan miniserver bawaannya sendiri untuk pengujian cepat, tetapi juga akan mendukung WSGI generik, berbagai macam server HTTP yang kompatibel dengan WSGI, dan CGI lama jika diperlukan.

Bottle tidak memerlukan dokumentasi sebanyak framework lainnya, tetapi dokumentasinya sama sekali tidak terbatas. Semua hal penting cocok di satu halaman web (meskipun panjang). Selain itu, Anda akan menemukan dokumentasi lengkap untuk setiap API, contoh penerapan di berbagai infrastruktur, penjelasan tentang bahasa template bawaan, dan banyak resep umum.

Seperti Flask, Anda dapat mengembangkan fungsionalitas Bottle secara manual atau melalui plug-in. Pengaya Bottle tidak sebanyak Flask, tetapi ada bagian yang berguna, seperti integrasi dengan berbagai lapisan database dan otentikasi pengguna dasar. Untuk dukungan asinkron, Bottle dapat menggunakan salah satu adaptor server yang ada yang berjalan secara asinkron, seperti aiohttp / uvloop, tetapi async/awaittidak didukung secara bawaan .

Salah satu konsekuensi dari minimalis Bottle adalah beberapa item tidak ada. Validasi formulir, termasuk fitur seperti perlindungan CSRF (permintaan pemalsuan lintas situs), tidak disertakan. Jika Anda ingin membangun aplikasi web yang mendukung interaksi pengguna tingkat tinggi, Anda perlu menambahkan dukungan itu sendiri.

Masalah lain dengan Bottle adalah bahwa pembangunan terhenti; rilis poin terakhir, 0,12, tiba di 2013. Artinya, Bottle terus dipertahankan, dan rilis pengembangannya tetap dapat digunakan untuk produksi. Para pengembang bermaksud untuk memberikan versi baru yang memberikan dukungan untuk edisi lama Python.

CherryPy

CherryPy telah ada dalam satu bentuk atau lainnya selama hampir 20 tahun, tetapi tidak kehilangan minimalisme dan keanggunan yang membedakannya dari awal.

Tujuan di balik CherryPy, selain hanya berisi bit kosong yang diperlukan untuk melayani halaman web, adalah untuk merasa, sejauh mungkin, tidak seperti "kerangka web" tetapi seperti jenis aplikasi Python lainnya. Situs-situs seperti Hulu dan Netflix telah menggunakan CherryPy dalam produksi karena kerangka kerjanya menyediakan basis yang sangat tidak mengganggu untuk dikembangkan. CherryPy menggunakan utas yang dikumpulkan di bawah kap, lebih baik untuk mendukung adaptor server multithread.

CherryPy memungkinkan Anda menjaga aplikasi web Anda terpisah dari logika inti. Untuk memetakan fungsi aplikasi Anda ke URL atau rute yang dilayani oleh CherryPy, Anda membuat kelas di mana ruang nama objek dipetakan langsung ke URL yang ingin Anda layani. Misalnya, root situs web disediakan oleh fungsi bernama "index." Parameter yang diteruskan ke fungsi tersebut digunakan untuk menangani variabel yang disediakan oleh metode GET atau POST.

Bit yang disertakan CherryPy dimaksudkan untuk berfungsi sebagai blok bangunan tingkat rendah. Pengenal sesi dan penanganan cookie disertakan, tetapi template HTML tidak. Seperti Bottle, CherryPy menawarkan cara untuk memetakan rute ke direktori di disk untuk penyajian file statis.

CherryPy akan sering tunduk pada pustaka pihak ketiga yang ada untuk mendukung fitur daripada menyediakannya secara asli. Aplikasi WebSocket, misalnya, tidak didukung oleh CherryPy secara langsung, tetapi melalui pustaka ws4py.

Dokumentasi CherryPy mencakup panduan tutorial praktis dari berbagai aspek program. Ini tidak akan membawa Anda melalui aplikasi ujung-ke-ujung yang lengkap, tidak seperti beberapa tutorial kerangka kerja lainnya, tetapi masih berguna. Dokumen tersebut dilengkapi dengan catatan praktis tentang penerapan di host virtual, reverse proxying melalui Apache dan Nginx, dan banyak skenario lainnya.

Elang

Jika Anda sedang membangun API berbasis REST dan tidak ada yang lain, Falcon dibuat hanya untuk Anda. Ramping dan cepat, dengan hampir tidak ada dependensi di luar pustaka standar, Falcon menyediakan semua yang Anda butuhkan untuk REST API dan tidak lebih. Falcon 2.0, dirilis pada 2019, tidak mendukung Python 2.x dan membutuhkan setidaknya Python 3.5.

Sebagian besar mengapa Falcon mendapatkan label "ringan dan ramping" tidak ada hubungannya dengan jumlah baris kode dalam kerangka kerja. Itu karena Falcon hampir tidak memaksakan strukturnya sendiri pada aplikasi. Yang harus dilakukan oleh aplikasi Falcon adalah menunjukkan fungsi mana yang memetakan ke titik akhir API mana. Mengembalikan JSON dari titik akhir melibatkan lebih dari sekadar menyiapkan rute dan mengembalikan data melalui json.dumpsfungsi dari pustaka standar Python. Dukungan untuk async belum tersedia di Falcon, tetapi pekerjaan sedang dilakukan untuk mewujudkannya di Falcon 3.0.

Falcon juga menggunakan default out-of-the-box yang waras, jadi sedikit mengutak-atik diperlukan untuk pengaturan. Misalnya, 404 dimunculkan secara default untuk rute apa pun yang tidak dideklarasikan secara eksplisit. Jika Anda ingin mengembalikan kesalahan ke klien, Anda dapat memunculkan salah satu dari sejumlah pengecualian saham yang dibundel dengan kerangka kerja (seperti HTTPBadRequest) atau menggunakan falcon.HTTPErrorpengecualian umum . Jika Anda membutuhkan preprocessing atau postprocessing untuk suatu rute, Falcon juga menyediakan pengait untuk itu.

Fokus Falcon pada API berarti hanya ada sedikit di sini untuk membangun aplikasi web dengan antarmuka pengguna HTML konvensional. Jangan berharap banyak pada fungsi pemrosesan formulir dan alat perlindungan CSRF, misalnya. Meskipun demikian, Falcon memberikan opsi elegan untuk memperluas fungsinya, sehingga item yang lebih canggih dapat dibuat. Selain mekanisme hooking yang disebutkan di atas, Anda akan menemukan antarmuka untuk membuat middleware yang dapat digunakan untuk membungkus semua API Falcon.

Dokumentasi untuk Falcon lebih ramping dibandingkan dengan kerangka lain, tetapi hanya karena ada lebih sedikit untuk dibahas. Panduan pengguna menyertakan panduan langkah demi langkah formal dari semua fitur utama, bersama dengan bagian mulai cepat yang memungkinkan Anda melihat kode sampel dengan atau tanpa anotasi.

FastAPI

Nama FastAPI adalah ringkasan yang bagus dari apa yang dilakukannya. Itu dibuat untuk membuat titik akhir API dengan cepat, dan juga berjalan cepat.

FastAPI memanfaatkan proyek Starlette untuk inti jaringan berkecepatan tinggi, tetapi Anda tidak perlu tahu tentang internal Starlette untuk menggunakan FastAPI. Anda mendefinisikan endpoint dengan cara yang hampir sama seperti aplikasi Flask atau Bottle — gunakan dekorator untuk menunjukkan fungsi mana yang menangani rute mana — dan kemudian mengembalikan kamus yang diterjemahkan secara otomatis ke dalam JSON.

Anda dapat dengan mudah mengganti bagaimana sesuatu dikembalikan. Misalnya, jika Anda ingin mengembalikan HTML / XML dari beberapa titik akhir, Anda dapat melakukannya hanya dengan mengembalikan Responseobjek khusus . Jika Anda ingin menambahkan middleware khusus, Anda dapat memasukkan apa pun yang mengikuti standar ASGI. 

FastAPI menggunakan petunjuk tipe Python untuk memberikan batasan pada jenis data yang diterima rute. Misalnya, jika Anda memiliki rute dengan tipe tersebut Optional[int], FastAPI akan menolak pengiriman apa pun kecuali bilangan bulat. Anda tidak perlu menambahkan kode validasi data ke titik akhir Anda; Anda cukup menggunakan petunjuk tipe dan biarkan FastAPI yang bekerja.

Secara alami, beberapa hal ditinggalkan. Tidak ada mesin templat HTML asli, misalnya, tetapi tidak ada kekurangan solusi pihak ketiga untuk mengisi celah itu. Sama dengan konektivitas database, tetapi dokumentasinya berisi detail tentang cara membujuk ORM tertentu (misalnya Peewee) untuk bekerja dengan perilaku asinkron FastAPI.

Labu

Banyak diskusi tentang kerangka kerja web Python dimulai dengan Flask, dan untuk alasan yang bagus. Flask adalah kerangka kerja yang mapan dan dipahami dengan baik yang mudah digunakan dan cukup stabil. Hampir tidak mungkin melakukan kesalahan saat menggunakan Flask untuk proyek web ringan atau REST API dasar, tetapi Anda akan menghadapi pekerjaan berat jika mencoba membangun sesuatu yang lebih besar.

Daya tarik utama Flask adalah hambatan masuknya yang rendah. Aplikasi dasar "hello world" dapat disiapkan dalam kurang dari 10 baris Python. Flask menyertakan sistem template HTML yang banyak digunakan, Jinja2, untuk membuat rendering teks menjadi mudah, tetapi Jinja2 dapat ditukar dengan sejumlah mesin template lain (seperti Mustache) atau Anda dapat menggulungnya sendiri.

Atas nama kesederhanaan, Flask menghilangkan ketidaknyamanan seperti lapisan data atau ORM, dan tidak menawarkan ketentuan untuk validasi formulir seperti itu. Namun, Flask dapat diperluas melalui ekstensi, yang jumlahnya banyak, mencakup banyak kasus penggunaan umum seperti caching, penanganan dan validasi formulir, dan konektivitas database. Desain lean-by-default ini memungkinkan Anda untuk mulai merekayasa aplikasi Flask dengan fungsionalitas minimum absolut, lalu melapisi hanya bagian yang Anda butuhkan saat Anda membutuhkannya.

Dokumentasi Flask ramah dan mudah dibaca. Dokumen quick-start melakukan pekerjaan yang sangat baik untuk membantu Anda memulai sekaligus menjelaskan pentingnya pilihan default untuk aplikasi Flask sederhana, dan dokumen API penuh dengan contoh yang bagus. Yang juga luar biasa adalah kumpulan cuplikan Flash, yang merupakan contoh cepat dan kotor tentang cara menyelesaikan tugas tertentu, seperti cara mengembalikan objek jika ada atau kesalahan 404 jika tidak ada.

Flask mencapai tonggak sejarah rilis 1.0 pada tahun 2018, dengan Python 2.6 dan Python 3.3 menjadi versi minimum yang didukung, dan dengan banyak perilakunya akhirnya ditetapkan. Flask tidak secara eksplisit mendukung sintaks asinkron Python, tetapi variasi Flask yang kompatibel dengan API bernama Quart telah dipisahkan untuk memenuhi permintaan itu.

Piramida

Kecil dan ringan, Pyramid sangat sesuai untuk tugas-tugas seperti mengekspos kode Python yang ada sebagai REST API, atau menyediakan inti untuk proyek web tempat pengembang melakukan sebagian besar pekerjaan berat.

“Pyramid akan memungkinkan Anda menjadi produktif dengan cepat, dan akan tumbuh bersama Anda,” kata dokumentasinya. “Itu tidak akan menghalangi Anda ketika aplikasi Anda kecil, dan itu tidak akan menghalangi Anda ketika aplikasi Anda menjadi besar.”

Cara yang baik untuk mendeskripsikan minimalis Pyramid adalah "bebas dari kebijakan," istilah yang digunakan di bagian dokumentasi yang membahas bagaimana bentuk Pyramid terhadap kerangka web lainnya. Pada dasarnya, "bebas dari kebijakan" berarti database mana atau bahasa template mana yang Anda pilih untuk digunakan bukanlah urusan Pyramid.

Sangat sedikit pekerjaan yang dibutuhkan untuk membangun aplikasi Piramida dasar. Seperti halnya Bottle dan Flask, aplikasi Pyramid dapat terdiri dari satu file Python, selain file untuk framework itu sendiri. API satu rute yang sederhana memerlukan tidak lebih dari selusin baris kode. Sebagian besar dari itu adalah from … importpernyataan seperti boilerplate dan menyiapkan server WSGI.

Secara default, Pyramid menyertakan beberapa item yang umum di aplikasi web, tetapi mereka disediakan sebagai komponen untuk digabungkan, bukan sebagai solusi lengkap. Dukungan untuk sesi pengguna, misalnya, bahkan dilengkapi dengan perlindungan CSRF. Tetapi dukungan untuk akun pengguna, seperti login atau manajemen akun, bukanlah bagian dari kesepakatan. Anda harus menggulungnya sendiri atau menambahkannya melalui plug-in. Hal yang sama berlaku untuk penanganan formulir dan koneksi database.

Pyramid bahkan menyediakan cara untuk membuat template dari proyek Pyramid sebelumnya untuk menggunakan kembali pekerjaan sebelumnya. Template ini, yang disebut "scaffolds", menghasilkan aplikasi Pyramid dengan perutean sederhana dan beberapa template awal HTML / CSS. Perancah yang dibundel mencakup proyek starter sampel dan proyek yang terhubung ke database melalui pustaka Python SQLAlchemy yang populer.