8 kerangka web Python kecil yang hebat

Kemudahan dan fleksibiliti Python bermaksud bahawa ia digunakan untuk membina perisian dalam hampir semua bidang kehidupan IT. Salah satu niche utama adalah perkhidmatan web, di mana kepantasan pengembangan dan metafora fleksibel Python menjadikan laman web dapat dikendalikan dengan cepat dan cepat.

Dan seperti yang anda sangka, Python memberi anda banyak pilihan dan garis lintang dalam kerangka web, baik kecil maupun besar. Bagaimanapun, tidak setiap projek web perlu berskala perusahaan. Sebilangan besar harus cukup besar untuk menyelesaikan pekerjaan, dan tidak lebih besar. Artikel ini meninjau lapan kerangka kerja Python yang terkenal yang menekankan kesederhanaan, penyampaian ringan, dan fokus yang ketat.

Sebotol

Botol boleh dianggap sejenis mini-Flask, kerana ia lebih ringkas dan ringkas daripada "kerja mikro" lain. Oleh kerana jejaknya yang minimum, Botol sangat sesuai untuk disertakan dalam projek lain atau untuk menghantar projek kecil dengan cepat seperti REST API. (Termos dibincangkan di bawah.) 

Seluruh pangkalan data untuk Botol sesuai dengan satu fail dan sama sekali tidak mempunyai pergantungan luaran. Walaupun begitu, Botol dilengkapi dengan fungsi yang cukup untuk membina jenis aplikasi web yang biasa tanpa bergantung pada bantuan dari luar.

Sistem penghalaan di Botol, yang memetakan URL ke fungsi, mempunyai sintaks yang hampir sama dengan Flask. Anda tidak terhad kepada satu set jalan yang berwayar; anda boleh membuatnya secara dinamik. Permintaan dan data respons, kuki, pemboleh ubah pertanyaan, data bentuk dari tindakan POST, tajuk HTTP, dan muat naik fail semuanya dapat diakses dan dimanipulasi dengan menggunakan objek di Botol.

Setiap kemampuan telah dilaksanakan dengan perhatian yang terperinci. Dengan memuat naik fail, misalnya, Anda tidak perlu mengganti nama file jika konvensi penamaannya bertentangan dengan sistem fail sasaran (seperti garis miring pada nama pada Windows). Botol boleh melakukannya untuk anda.

Botol merangkumi mesin templat HTML ringkasnya sendiri. Sekali lagi, walaupun minimum, mesin templat mempunyai semua perkara penting. Pemboleh ubah yang disertakan dalam templat diberikan dengan HTML selamat secara lalai; anda harus menunjukkan pemboleh ubah mana yang selamat untuk dihasilkan semula secara literal. Sekiranya anda lebih suka menukar mesin templat Botol dengan yang lain, seperti Jinja2, Botol membolehkan anda melakukannya tanpa ribut-ribut. Saya lebih suka sistem templat sederhana yang digabungkan dengan Botol; cepat, sintaksnya tidak bersahaja, dan ini membolehkan anda mencantumkan teks kod dan templat tanpa kesulitan yang tidak semestinya.

Botol malah menyokong pelbagai bahagian belakang pelayan. Ia dilengkapi dengan miniserver bawaan sendiri untuk ujian pantas, tetapi juga akan menyokong WSGI generik, pelbagai pelayan HTTP yang serasi dengan WSGI, dan CGI lama biasa jika diperlukan.

Botol tidak memerlukan dokumentasi sebanyak kerangka kerja lain, tetapi dokumennya tidak semestinya minim. Semua perkara penting sesuai dengan satu laman web (walaupun panjang). Di luar itu, anda akan mendapat dokumentasi lengkap untuk setiap API, contoh untuk menggunakan berbagai infrastruktur, penjelasan mengenai bahasa templat bawaan, dan banyak resipi umum.

Seperti Flask, anda boleh mengembangkan fungsi Botol secara manual atau melalui pemalam. Plugin botol tidak seberapa banyak yang terdapat di Flask, tetapi terdapat potongan berguna, seperti penyatuan dengan pelbagai lapisan pangkalan data dan pengesahan pengguna asas. Untuk sokongan async, Bottle boleh menggunakan salah satu penyesuai pelayan yang ada yang berjalan secara tidak segerak, seperti aiohttp / uvloop, tetapi async/awaittidak disokong secara asli.

Satu akibat minimalisme Botol adalah bahawa beberapa item tidak ada di sana. Pengesahan borang, termasuk ciri seperti perlindungan CSRF (pemalsuan permintaan lintas tapak), tidak disertakan. Sekiranya anda ingin membina aplikasi web yang menyokong tahap interaksi pengguna yang tinggi, anda perlu menambahkannya sendiri.

Masalah lain dengan Botol adalah bahawa pembangunan telah terhenti; pelepasan titik terakhir, 0.12, tiba pada tahun 2013. Yang mengatakan, Botol terus dikekalkan, dan pelepasan pengembangannya tetap dapat digunakan untuk pengeluaran. Pembangun berhasrat untuk memberikan versi baru yang memberikan sokongan untuk edisi lama Python.

CherryPy

CherryPy telah wujud dalam satu bentuk atau yang lain selama hampir 20 tahun, tetapi tidak kehilangan minimalisme dan keanggunan yang membezakannya sejak awal.

Matlamat di sebalik CherryPy, selain hanya berisi bit kosong yang diperlukan untuk melayani laman web, adalah merasakan, sejauh mungkin, tidak seperti "kerangka web" tetapi seperti aplikasi Python yang lain. Laman web seperti Hulu dan Netflix telah menggunakan CherryPy dalam pengeluaran kerana kerangka kerja menyediakan asas yang sangat sukar untuk dibina. CherryPy menggunakan benang yang digabungkan di bawah tudung, lebih baik menyokong penyesuai pelayan multithreaded.

CherryPy membolehkan anda memisahkan aplikasi web anda daripada logik teras. Untuk memetakan fungsi aplikasi anda ke URL atau laluan yang dilayan oleh CherryPy, anda membuat kelas di mana ruang nama objek memetakan terus ke URL yang ingin anda layani. Sebagai contoh, akar laman web disediakan oleh fungsi bernama "indeks." Parameter yang diteruskan ke fungsi tersebut digunakan untuk menangani pemboleh ubah yang disediakan oleh kaedah GET atau POST.

Bit yang disertakan CherryPy dimaksudkan untuk berfungsi sebagai blok bangunan tingkat rendah. Pengecam sesi dan pengendalian kuki disertakan, tetapi templat HTML tidak. Seperti Botol, CherryPy menawarkan cara untuk memetakan laluan ke direktori dalam disk untuk penyampaian fail statik.

CherryPy selalunya akan memilih perpustakaan pihak ketiga yang ada untuk menyokong ciri daripada menyediakannya secara asli. Aplikasi WebSocket, misalnya, tidak disokong oleh CherryPy secara langsung, tetapi melalui perpustakaan ws4py.

Dokumentasi untuk CherryPy merangkumi panduan tutorial yang berguna mengenai pelbagai aspek program. Ini tidak akan membawa anda melalui aplikasi end-to-end yang lengkap, tidak seperti beberapa tutorial kerangka lain, tetapi masih berguna. Dokumen tersebut dilengkapi dengan nota berguna mengenai penyebaran di host maya, proksi terbalik melalui Apache dan Nginx, dan banyak senario lain.

Falcon

Sekiranya anda membina API berasaskan REST dan tidak ada yang lain, Falcon dibuat khas untuk anda. Bersandar dan pantas, dengan hampir tidak bergantung pada perpustakaan standard, Falcon menyediakan semua yang anda perlukan untuk REST API dan tidak lebih dari itu. Falcon 2.0, yang dikeluarkan pada tahun 2019, menghilangkan sokongan Python 2.x dan memerlukan sekurang-kurangnya Python 3.5.

Sebahagian besar mengapa Falcon memperoleh label "ringan dan langsing" tidak banyak berkaitan dengan bilangan baris kod dalam kerangka. Ini kerana Falcon tidak menerapkan strukturnya sendiri pada aplikasi. Yang perlu dilakukan oleh aplikasi Falcon adalah menunjukkan fungsi mana peta ke titik akhir API mana. Mengembalikan JSON dari titik akhir melibatkan lebih banyak daripada menyiapkan laluan dan mengembalikan data melalui json.dumpsfungsi dari pustaka standard Python. Sokongan untuk async belum tiba di Falcon, tetapi usaha sedang dilakukan untuk mewujudkannya di Falcon 3.0.

Falcon juga menggunakan lalai yang tidak waras, sehingga diperlukan sedikit gangguan untuk penyiapan. Sebagai contoh, 404 dibangkitkan secara lalai untuk mana-mana laluan yang tidak dinyatakan secara eksplisit. Sekiranya anda ingin mengembalikan kesilapan kepada klien, anda dapat meningkatkan salah satu dari sejumlah pengecualian stok yang digabungkan dengan kerangka kerja (seperti HTTPBadRequest) atau menggunakan falcon.HTTPErrorpengecualian umum . Sekiranya anda memerlukan proses awal atau pasca proses untuk laluan, Falcon juga menyediakan kait untuk mereka.

Fokus Falcon pada API bermaksud ada sedikit di sini untuk membina aplikasi web dengan antara muka pengguna HTML konvensional. Jangan terlalu mengharapkan fungsi pemprosesan bentuk dan alat perlindungan CSRF, misalnya. Oleh itu, Falcon memberikan pilihan elegan untuk memperluas fungsinya, jadi barang yang lebih canggih dapat dibina. Selain dari mekanisme penyambungan yang disebutkan di atas, anda akan menemui antara muka untuk membuat alat tengah yang dapat digunakan untuk membungkus semua API Falcon.

Dokumentasi untuk Falcon lebih langsing berbanding dengan kerangka kerja lain, tetapi hanya kerana terdapat sedikit yang perlu dilindungi. Panduan pengguna merangkumi panduan langkah demi langkah rasmi dari semua ciri utama, bersama dengan bahagian permulaan pantas yang membolehkan anda melihat kod sampel dengan atau tanpa anotasi.

FastAPI

Nama FastAPI adalah penjumlahan yang baik dari apa yang dilakukannya. Ia dibina untuk membuat titik akhir API dengan cepat, dan juga berjalan dengan pantas.

FastAPI menggunakan projek Starlette untuk teras rangkaian berkelajuan tinggi, tetapi anda tidak perlu tahu mengenai dalaman Starlette untuk menggunakan FastAPI. Anda menentukan titik akhir dengan cara yang hampir sama dengan aplikasi Flask atau Botol — gunakan penghias untuk menunjukkan fungsi mana yang mengendalikan laluan-dan kemudian mengembalikan kamus yang diterjemahkan secara automatik ke dalam JSON.

Anda boleh dengan mudah mengatasi bagaimana perkara dikembalikan. Sebagai contoh, jika anda ingin mengembalikan HTML / XML dari beberapa titik akhir, anda dapat melakukannya dengan hanya mengembalikan Responseobjek khusus . Sekiranya anda ingin menambah perisian tengah, anda boleh memasukkan apa sahaja yang mengikut standard ASGI. 

FastAPI menggunakan petunjuk jenis Python untuk memberikan batasan pada jenis data yang diterima oleh laluan. Sebagai contoh, jika anda mempunyai rute dengan jenisnya Optional[int], FastAPI akan menolak penyerahan kecuali bilangan bulat. Anda tidak perlu menambahkan kod pengesahan data ke titik akhir anda; anda hanya boleh menggunakan petunjuk jenis dan membiarkan FastAPI melakukan kerja.

Secara semula jadi, beberapa perkara ditinggalkan Tidak ada mesin templat HTML asli, misalnya, tetapi tidak ada kekurangan penyelesaian pihak ketiga untuk mengisi jurang itu. Sama dengan penyambungan pangkalan data, tetapi dokumentasi mengandungi perincian tentang cara membujuk ORM tertentu (misalnya Peewee) untuk bekerja dengan tingkah laku asinkron FastAPI.

Kelalang

Banyak perbincangan mengenai kerangka web Python bermula dengan Flask, dan dengan alasan yang baik. Flask adalah kerangka yang mapan, difahami dengan baik yang mudah digunakan dan cukup stabil. Tidak mungkin salah menggunakan Flask untuk projek web ringan atau REST API asas, tetapi anda akan menghadapi masalah berat jika anda berusaha membina sesuatu yang lebih besar.

Daya tarikan utama Flask adalah penghalang masuknya yang rendah. Aplikasi "hello world" asas boleh disediakan dalam kurang dari 10 barisan Python. Flask merangkumi sistem templat HTML yang digunakan secara meluas, Jinja2, untuk mempermudah teks rendering, tetapi Jinja2 dapat ditukar dengan sejumlah mesin templat lain (seperti misai) atau anda boleh melancarkan sendiri.

Atas nama kesederhanaan, Flask menghilangkan kebaikan seperti lapisan data atau ORM, dan tidak menawarkan peruntukan untuk pengesahan bentuk seperti itu. Walau bagaimanapun, Flask dapat dikembangkan melalui peluasan, di antaranya terdapat puluhan, yang meliputi banyak kes penggunaan umum seperti caching, pengendalian bentuk dan pengesahan, dan penyambungan pangkalan data. Reka bentuk ramping secara lalai ini membolehkan anda memulakan kejuruteraan aplikasi Flask dengan fungsi minimum yang minimum, kemudian lapisan hanya pada bahagian yang anda perlukan ketika anda memerlukannya.

Dokumentasi Flask bersifat genial dan senang dibaca. Dokumen cepat memulakan tugas yang sangat baik untuk memulakan anda sementara juga menjelaskan kepentingan pilihan lalai untuk aplikasi Flask yang sederhana, dan dokumen API penuh dengan contoh yang baik. Juga sangat baik ialah koleksi coretan Flash, yang merupakan contoh cepat dan kotor tentang bagaimana menyelesaikan tugas tertentu, seperti cara mengembalikan objek jika ada atau ralat 404 jika tidak.

Flask mencapai kejayaannya 1.0 pada tahun 2018, dengan Python 2.6 dan Python 3.3 menjadi versi minimum yang disokong, dan dengan banyak tingkah lakunya akhirnya menjadi batu. Flask tidak secara eksplisit menyokong sintaks async Python, tetapi variasi yang sesuai dengan API Flask yang disebut Quart telah diputar untuk memenuhi permintaan itu.

Piramid

Kecil dan ringan, Piramid sangat sesuai untuk tugas-tugas seperti mendedahkan kod Python yang ada sebagai REST API, atau menyediakan inti untuk projek web di mana pemaju melakukan sebahagian besar pengangkatan berat.

"Piramid akan membolehkan anda menjadi produktif dengan cepat, dan akan berkembang bersama anda," kata dokumentasi. "Ini tidak akan menghalangi Anda ketika aplikasi Anda kecil, dan tidak akan menghalangi ketika aplikasi anda menjadi besar."

Cara yang baik untuk menggambarkan minimalisme Piramid adalah "bebas dari kebijakan," istilah yang digunakan dalam bahagian dokumentasi yang membincangkan bagaimana Piramid menentang kerangka web lain. Pada dasarnya, "bebas daripada kebijakan" bermaksud bahawa pangkalan data atau bahasa templat mana yang anda pilih untuk digunakan bukanlah masalah Pyramid.

Sangat sedikit kerja yang diperlukan untuk membina aplikasi Piramid asas. Seperti Botol dan Flask, aplikasi Piramid dapat terdiri dari satu fail Python, selain dari fail untuk kerangka itu sendiri. API sehala yang sederhana tidak memerlukan lebih daripada selusin baris kod. Sebahagian besar dari itu adalah papan from … importkenyataan seperti pernyataan dan menyediakan pelayan WSGI.

Secara lalai, Piramid menyertakan beberapa item yang biasa terdapat dalam aplikasi web, tetapi ia disediakan sebagai komponen untuk dijahit bersama, bukan sebagai penyelesaian lengkap. Sokongan untuk sesi pengguna, misalnya, bahkan dilengkapi dengan perlindungan CSRF. Tetapi sokongan untuk akaun pengguna, seperti log masuk atau pengurusan akaun, bukan merupakan sebahagian daripada perjanjian tersebut. Anda mesti menggulungnya sendiri atau menambahkannya melalui pemalam. Perkara yang sama berlaku untuk pengendalian borang dan sambungan pangkalan data.

Pyramid bahkan menyediakan cara untuk membuat templat dari projek Piramid sebelumnya untuk menggunakan semula karya sebelumnya. Templat ini, yang disebut "perancah," menghasilkan aplikasi Piramid dengan perutean sederhana dan beberapa templat HTML / CSS. Perancah yang dibundel merangkumi contoh projek pemula dan projek yang menghubungkan ke pangkalan data melalui SQLAlchemy perpustakaan Python yang popular.