Merender tabel dengan data dalam template Flask adalah tugas yang relatif sederhana jika tabelnya pendek, tetapi bisa sangat sulit untuk tabel yang lebih besar yang memerlukan fitur seperti pengurutan, penomoran halaman, dan pencarian. Pada artikel ini saya akan menunjukkan kepada Anda bagaimana mengintegrasikan dataTables. js di templat Anda, yang memungkinkan Anda membuat tabel berfitur lengkap dengan mudah Show
Cara Mendapatkan KodeSemua kode yang disajikan dalam artikel ini berasal dari repositori flask-tables saya di GitHub. Saya hanya akan menampilkan cuplikan yang menarik di sini, jadi jika Anda berniat menjalankan kode secara lokal, Anda harus mengkloning repositori ini, membuat lingkungan virtual, dan menginstal persyaratan. file txt di dalamnya Memperbarui. Saya sekarang telah merilis pembaruan untuk artikel ini, termasuk dukungan untuk mengedit sel tabel. Lihat disini Cara Merender Tabel di FlaskSaya akan mulai dari awal, jadi langkah pertama adalah membuat aplikasi Flask kecil yang merender tabel biasa Tabel tersebut akan berisi informasi tentang pengguna. Berikut adalah model SQLAlchemy yang akan saya gunakan untuk database
Aplikasi akan memiliki satu rute, yang meneruskan kueri dengan semua pengguna yang disimpan dalam database ke template Jinja untuk dirender _Nama templatnya adalah bootstrap_table. html karena saya akan menggunakan framework Bootstrap CSS untuk menyediakan penataan tabel dasar. Ini sepenuhnya opsional, tetapi dalam kasus saya ini masuk akal karena saya menggunakan Bootstrap di sebagian besar proyek saya, dan saya ingin tabel saya memiliki tampilan yang konsisten dengan halaman lainnya. Ini adalah bootstrap_table. templat html
Saya harap Anda setuju bahwa tidak banyak yang terjadi dalam template ini. Elemen _4 dibuat dengan dua bagian. header (di dalam _5 elemen) dan body (di dalam 6). Konten di kedua bagian adalah deretan data, baik header tabel atau pengguna sebenarnya. Badan tabel dibuat dengan for-loop Jinja yang mengulang objek kueri yang diteruskan sebagai argumen dalam panggilan 7Dari melihat baris pertama di template, Anda tahu bahwa saya menggunakan pewarisan template. Ini karena saya ingin agar pelat cetak halaman tidak memperumit file template. Dasar. html dari mana bootstrap_table. html mewarisi dari disalin di bawah ini
Templat dasar ini menyertakan file CSS Bootstrap dari CDN, menerima argumen 8 yang disisipkan di bagian 9 dan sebagai elemen 0 di bagian atas halaman, dan membuat dua blok 1 dan 2 untuk digunakan oleh templat turunanMenjalankan Tabel BootstrapUntuk dapat menguji aplikasi, saya perlu membuat beberapa konten acak untuk tabel database, The create_fake_users. skrip py yang ditunjukkan di bawah mencapai itu
Skrip ini menggunakan paket Faker untuk menghasilkan informasi palsu (namun realistis). Trik kecil menarik yang saya gunakan di sini adalah "mencuri" objek 3 dan model 4 dari aplikasi Flask. Ini benar-benar berfungsi dengan baik dan menghilangkan kebutuhan untuk menduplikasi database dan definisi model untuk digunakan di luar aplikasi FlaskJika Anda telah mengkloning repositori flask-tables dan menyiapkan lingkungan virtual dengan semua dependensi, Anda sekarang dapat membuat database dengan beberapa pengguna acak dengan perintah berikut
Dan kemudian Anda dapat menjalankan aplikasi tabel Bootstrap
Jika Anda menavigasi ke http. // localhost. 5000 di browser web Anda, Anda akan melihat tabel yang bagus dengan lima baris Menambahkan tabel data. jsMeskipun tabel di atas terlihat bagus, hanya praktis untuk menggunakannya jika jumlah barisnya sangat sedikit. Secara umum Anda akan menemukan bahwa pengguna mengharapkan tabel yang lebih besar memiliki fitur interaktif, seperti paginasi, pencarian dan pengurutan, dan tabel Bootstrap tidak memiliki semua itu. Jadi di sinilah tempat dataTables. perpustakaan js memasuki gambar. Pustaka ini berjalan di browser dan dilampirkan ke elemen 4 untuk menyempurnakannyaSebelum saya tunjukkan cara menerapkan dataTables. js ke tabel Bootstrap di atas, pustaka harus disertakan di basis. html, sehingga tersedia untuk digunakan. Di bawah ini Anda dapat menemukan template dasar yang diperbarui yang mencakup dataTables. js
Di bagian _9 saya telah menambahkan dataTables. bootstrap5. lembar gaya css. Tabel data. Pustaka js menyediakan gaya yang kompatibel dengan beberapa kerangka kerja CSS, jadi Anda harus menggunakan file CSS yang benar di sini. Untuk Bootstrap, ada style untuk versi 3, 4 dan 5. Jika Anda tidak menggunakan Bootstrap, Bootstrap juga menyediakan gaya untuk tabel yang dibuat dengan Foundation, jQuery UI, Bulma, dan beberapa kerangka kerja CSS lainnya. Jika Anda tidak menggunakan kerangka kerja CSS apa pun, itu juga menyediakan satu set gaya mandiriDi bagian bawah elemen _7 saya telah menambahkan beberapa skrip. Pertama ada perpustakaan jQuery, yang merupakan ketergantungan yang diperlukan dari dataTables. js. Berikutnya adalah inti dataTables. js, yang disebut jquery. tabel data. js. Skrip ketiga dan terakhir disebut dataTables. bootstrap5. js, dan memberikan logika khusus yang berlaku untuk integrasi Bootstrap 5 pilihan saya. Jika Anda menggunakan kerangka gaya yang berbeda, Anda perlu mengubah skrip terakhir iniDi bagian paling akhir dari badan, templat dasar menyimpan blok 2, disertakan di sana untuk memberikan kesempatan kepada templat turunan untuk menambahkan skrip mereka sendiri. Ini akan menjadi bagaimana templat dapat menginisialisasi dan mengonfigurasi tabel data. perpustakaan jsTabel DasarDalam implementasinya yang paling dasar, semua yang diperlukan untuk menyempurnakan tabel adalah memanggil fungsi 9 di atasnya. Menggunakan contoh tabel Bootstrap sebagai titik awal, satu-satunya perubahan yang perlu dilakukan adalah menambahkan skrip pendek di template untuk memanggil fungsi ini
Fungsi _0 berasal dari jQuery dan digunakan untuk memberi tahu browser untuk menjalankan fungsi yang diteruskan sebagai argumen setelah halaman selesai dimuat. Ekspresi _1 adalah pemilih jQuery yang mengambil elemen dengan atribut 2 yang disetel ke 3, dengan kata lain, tabel yang dirender dalam template Jinja. Fungsi _9 dari dataTables. js memodifikasi tabel ini pada tempatnya, seperti yang akan Anda lihat sebentar lagiMenjalankan Tabel DasarSebelum Anda mencoba contoh ini, sebaiknya tambahkan beberapa pengguna lagi ke database. Mari kita tambahkan 100 lagi
Seharusnya sekarang ada 105 pengguna dalam database, yang merupakan ukuran yang bagus untuk mengalami fitur pagination. Jika Anda memiliki kloning repositori flask-tables, contoh ini disebut basic_table. py dan Anda dapat memulainya sebagai berikut _0Jika Anda sekarang menavigasi ke http. // localhost. 5000 di browser Anda, Anda akan melihat tabel yang jauh lebih bagus Tabel ini mengimplementasikan semua fitur yang Anda harapkan, termasuk penomoran halaman (pojok kanan bawah tabel), pencarian (kanan atas), dan pengurutan (tajuk tabel). Selain itu, di kiri atas ada dropdown di mana Anda dapat memilih berapa banyak baris yang ditampilkan per halaman, dan di pojok kiri bawah Anda dapat melihat rentang baris yang sedang ditampilkan, dan berapa banyak baris yang ada di . Ini semua dikelola oleh dataTables. js, tanpa harus melakukan pekerjaan tambahan selain merender tabel Fungsi _9 menerima objek opsi yang dapat digunakan aplikasi untuk menyesuaikan cara peningkatan tabel. Jumlah opsi yang tersedia mencakup berbagai penyesuaianUntuk mendemonstrasikan cara kerja penyesuaian ini, saya akan mengubah cara kerja penyortiran dan pencarian menggunakan opsi 6 _1Opsi _6 menerima array sub-opsi untuk setiap kolom dalam tabel. Untuk kolom yang tidak memerlukan penyesuaian, nilai 8 diberikan. Saya telah membuat dua penyesuaian, pertama saya menyetel opsi kolom 9 ke 0 untuk kolom Umur, Alamat, dan Nomor Telepon. Ini akan menghapus kolom ini saat perpustakaan mencari kecocokan dengan string pencarian yang diberikan di kotak pencarian. Perubahan kedua adalah menyetel opsi _1 ke 0 untuk kolom Alamat dan Nomor Telepon, yang menghapus tajuk penyortiran yang dapat diklik pada dua kolom iniMenambahkan Sumber Data AjaxAnda mungkin bertanya-tanya mengapa saya menyebut tabel di atas sebagai tabel "dasar", mengingat tabel tersebut memiliki semua fitur yang mungkin Anda inginkan dalam sebuah tabel. Masalah dengan cara menggunakan dataTables ini. js adalah Anda harus merender seluruh tabel ke halaman sebelum pustaka mengambil alih dan menerapkan peningkatannya. Jika tabelnya besar, Jinja mungkin membutuhkan banyak waktu untuk merendernya, dan kemudian browser mungkin menghabiskan lebih banyak waktu untuk mengunduh semua konten HTML itu, dan semua ini akan terjadi saat pengguna menunggu halaman ditampilkan. Untuk tabel panjang, saat halaman selesai dimuat di browser, Anda mungkin melihat tabel asli ditampilkan di halaman sesaat sebelum penyempurnaan diterapkan, hanya karena jumlah baris yang perlu disembunyikan sebagai akibat dari Meskipun solusi dasar dari bagian sebelumnya cukup sederhana, ini hanya berfungsi untuk tabel yang tidak terlalu panjang. Pendekatan yang lebih baik adalah merender tabel tanpa baris apa pun, lalu minta browser meminta data yang ada di tabel secara asinkron melalui permintaan terpisah Ini jelas membutuhkan integrasi yang lebih terlibat, tetapi upayanya masih relatif rendah. Perubahan pertama yang akan saya lakukan adalah memperluas model 4 dengan metode 4 yang dapat mengembalikan pengguna sebagai kamus Python yang dapat diserialisasikan ke JSON _2Titik akhir utama dalam aplikasi sekarang akan merender tabel kosong, jadi tidak perlu lagi meneruskan kueri pengguna ke template _3Titik akhir kedua perlu ditambahkan untuk data tabel. Endpoint ini akan menampilkan payload JSON dalam format berikut _4Saya telah memutuskan untuk meletakkan titik akhir kedua di URL/api/data. Implementasi titik akhir kedua ini ditunjukkan di bawah ini _5Template yang merender tabel tidak memerlukan for-loop yang merender semua pengguna lagi, tabel sekarang dirender tanpa baris data apa pun _6Dan terakhir, skrip yang melampirkan dataTables. js ke tabel harus meneruskan opsi 5 dengan URL titik akhir data, dan setiap kolom memerlukan sub-opsi 3 yang menunjukkan kunci mana di setiap kamus elemen yang harus digunakan untuk kolom tersebut _7Menjalankan Tabel AjaxDalam repositori flask-tables, solusi ajax yang dijelaskan di atas didefinisikan dalam ajax_table. py dan template/ajax_table. file html. Anda dapat menjalankan versi tabel ini sebagai berikut _8Seperti sebelumnya, Anda dapat melihat tabel dengan membuka http. // localhost. 5000 di browser Anda Tabel Berbasis ServerTabel ajax lebih baik daripada tabel dasar karena data diunduh di latar belakang, setelah halaman dimuat. Tetapi seperti solusi dasarnya, metode ini memiliki masalah bahwa data diunduh semua dalam satu permintaan, jadi ini masih bukan sesuatu yang dapat Anda gunakan untuk kumpulan tabel yang sangat besar karena data akan memakan waktu terlalu lama untuk diunduh dan tidak ada yang ditampilkan. . Untuk tabel yang sangat besar, datanya bahkan mungkin tidak muat dalam memori browser sekaligus Solusi sempurna, yang akan berfungsi untuk tabel dengan ukuran apa pun, adalah agar browser mengunduh baris tabel sesuai permintaan, sesuai kebutuhan. Dengan solusi jenis ini, tabel dengan ribuan, atau bahkan jutaan baris akan tetap bekerja dengan kinerja yang baik karena klien hanya akan mengunduh beberapa baris yang diperlukan untuk ditampilkan. Dan saat pengguna menavigasi ke halaman lain, permintaan baru akan mengunduh baris baru yang terlihat Ini adalah solusi yang bagus, tetapi memiliki kerugian besar. Di tabel dasar dan ajax, tabel data. Pustaka js dapat mengimplementasikan pencarian dan penyortiran sendiri, karena memiliki akses ke seluruh kumpulan data. Jika perpustakaan akan mengunduh data satu halaman pada satu waktu, maka itu tidak akan dapat mengelola filter pencarian atau header penyortiran yang dapat diklik. Solusi ini adalah yang paling sulit untuk diterapkan, karena pencarian dan penyortiran perlu dipindahkan ke server pada titik akhir /api/data Tabel data. js menyebut metode ini pemrosesan sisi server, karena metode ini meneruskan kontrol pagination, mencari, dan menyortir ke server Mulai dari solusi ajax, perubahan template untuk mengaktifkan opsi sisi server sebenarnya sangat sederhana. Yang perlu dilakukan hanyalah menambahkan opsi 7 ke tabel _9Ketika opsi _8 diaktifkan, perpustakaan akan menonaktifkan pemrosesan datanya sendiri dan sebagai gantinya akan mengirimkan persyaratan paginasi, pencarian, dan pengurutan sebagai argumen string kueri ke titik akhir ajaxPaginasi Sisi ServerDalam upaya pertama saya memproses sisi server, saya akan menunjukkan kepada Anda bagaimana menerapkan paginasi. Tabel data. js library akan mengirimkan argumen string kueri _9 dan 0 yang menunjukkan rentang baris yang diperlukanInilah titik akhir paginasi 0Saya harap ini tidak terlalu sulit untuk diikuti. Titik akhir mengambil argumen _9 dan 0 dari objek permintaan, dan kemudian menerapkannya sebagai filter 3 dan 4 pada objek kueri SQLAlchemyRespons yang dikirim kembali ke dataTables. js terdiri dari objek JSON dengan empat kunci
Titik akhir ini berfungsi dan dapat digunakan, tetapi karena pencarian dan pengurutan tidak diterapkan, opsi tersebut akan muncul seolah-olah tidak berfungsi Pencarian Sisi ServerImplementasi untuk pencarian sedikit lebih terlibat. Tabel data. pustaka js akan mengirimkan apa yang diketik pengguna di kotak pencarian dalam argumen string kueri 02 (tanda kurung adalah bagian dari nama argumen)Dalam database relasional, opsi yang baik untuk melakukan pencarian adalah operator 03, yang mencari menggunakan pola sederhana. Untungnya ini terintegrasi dengan SQLAlchemy. Jika Anda ingin mencari nama yang dimulai dengan "Chris", kuerinya adalah 1 04 bertindak sebagai placeholder, jadi kueri ini akan cocok dengan pengguna bernama Chris, Christian, dan Christina. A _04 juga dapat ditambahkan di awal 2Sekarang teks di antara tanda persen dapat muncul di mana saja pada nama, sehingga kueri di atas akan mencocokkan pengguna bernama Aaron, Arnold, dan lainnya dengan "ar" di mana saja pada nama mereka Dalam implementasi dua tabel sebelumnya, pencarian tidak hanya dilakukan di kolom Nama, konfigurasi tabel memiliki kolom Nama dan Email yang dapat dicari. Ini dapat diimplementasikan dalam SQLAlchemy menggunakan operator 06 _3Kueri ini dapat ditambahkan ke titik akhir /api/data tepat di atas variabel 7 _4Dengan versi titik akhir ini, variabel 7 akan dihitung setelah pencarian diterapkan, tetapi sebelum paginasi, sehingga akan memberi tahu klien berapa banyak rekaman yang cocok dengan pencarian. Seingat Anda, informasi ini ditampilkan di sudut kiri bawah tabelPenyortiran Sisi ServerLogika terakhir yang perlu ditambahkan ke titik akhir /api/data adalah penyortiran. Klien akan mengirimkan persyaratan penyortiran dalam argumen string kueri berikut
Tabel mendukung pengurutan berdasarkan beberapa kolom juga. Sebagai pengguna, Anda dapat memilih kolom pengurutan tambahan dengan mengklik-geser pada header pengurutan. Server menerima kolom tambahan dengan nomor indeks yang meningkat dalam argumen urutan. Misalnya, kolom pengurutan sekunder akan diberikan dalam argumen 13 dan 14Klien juga mengirimkan konfigurasi kolom ke server dan ini sebenarnya berguna karena dapat digunakan untuk mengubah indeks kolom menjadi nama kolom. Untuk konfigurasi tabel yang digunakan dalam proyek ini, argumen berikut akan dikirim juga sebagai argumen string kueri
Menggunakan elemen di atas dari string kueri, berikut adalah potongan Python yang menghitung kolom pengurutan pertama 5Logika ini tidak sepele, jadi Anda mungkin perlu membacanya dengan cermat untuk memahami semua yang terjadi. Variabel 25 diimpor dari string kueri, lalu digunakan sebagai indeks untuk memasukkan nama kolom ke dalam variabel 26Sama seperti masalah keamanan, saya memastikan bahwa nama kolom adalah salah satu dari tiga kolom yang memiliki rangkaian opsi 1. Jika server menerima nama kolom apa pun yang bukan salah satunya, maka nama tersebut disetel ulang kembali ke 16. Ini sebagai tindakan pencegahan, karena bukan ide yang baik untuk mengizinkan klien meminta penyortiran berdasarkan kolom arbitrer tanpa validasi apa punVariabel 29 kemudian disetel ke nilai boolean 30 atau 31 sesuai dengan arah penyortiranTiga baris terakhir dalam cuplikan mendapatkan kolom yang dipilih dari model 4 menggunakan 33, dan menerapkan kualifikasi penyortiran 34 jika arah menurun diminta. Saat mengurutkan berdasarkan nama menaik, nilai 35 di akhir akan menjadi 36. Jika diurutkan berdasarkan usia menurun, nilai 35 akan menjadi 38. Inilah yang dibutuhkan oleh filter _39 dari SQLAlchemy sebagai argumenDi bawah ini Anda dapat melihat bagaimana cuplikan penyortiran di atas dimasukkan ke dalam /api/data endpoint. Anda akan melihat bahwa ada sedikit lebih banyak kerumitan yang diperkenalkan oleh while-loop yang berhubungan dengan beberapa kolom pengurutan 6Menjalankan Tabel Berbasis ServerJika Anda berhasil sampai di sini, Anda dapat memberi selamat kepada diri sendiri, karena ini adalah akhirnya, implementasi tabel yang lebih maju sekarang sudah selesai Sebelum Anda mencoba ini, sebaiknya tambahkan lebih banyak pengguna ke database, karena penerapan tingkat lanjut ini benar-benar bersinar saat ada banyak data 7Menggunakan repositori flask-tables, Anda dapat menjalankan versi tabel ini sebagai berikut _8Dan sekali lagi arahkan ke http. // localhost. 5000 di browser Anda dan hargai betapa bagus dan berkinerjanya meja Anda Jika Anda ingin menguji penerapan ini, Anda dapat menambahkan pengguna sebanyak yang Anda inginkan ke tabel. Performa solusi ini sekarang didorong oleh seberapa cepat database Anda dapat melakukan kueri yang diperlukan KesimpulanSaya harap artikel ini menyenangkan untuk dibaca seperti saat saya menulisnya Tabel data. Perpustakaan js memiliki daftar fitur yang luas, banyak di antaranya belum saya bahas, jadi Anda harus membaca dokumentasinya untuk mempelajari semua yang ditawarkan perpustakaan ini Memperbarui. Saya sekarang telah beralih ke jaringan. js sebagai pustaka tabel favorit saya untuk digunakan dengan Flask. Saya telah menulis artikel tentang itu di sini Sudahkah Anda menggunakan metode berbeda untuk membuat tabel Anda? Halo, dan terima kasih telah mengunjungi blog saya. Jika Anda menikmati artikel ini, mohon pertimbangkan untuk mendukung pekerjaan saya di blog ini di Patreon Bagaimana cara mendapatkan data dari Flask ke HTML?meminta. membentuk. get(“fname”) akan mendapatkan input dari nilai Input yang memiliki atribut name sebagai fname dan disimpan dalam variabel first_name meminta. membentuk. get(“lname”) akan mendapatkan input dari nilai Input yang memiliki atribut name sebagai lname dan disimpan dalam variabel last_name Bagaimana cara menampilkan data dari database dalam HTML menggunakan Python?impor mysql. konektor impor webbrowser conn = mysql. penyambung. terhubung(user='root', password='', host='localhost',database='company') jika terhubung. cetak ("Berhasil Terhubung") lainnya. print ("Koneksi Tidak Terbentuk") select_employee = """SELECT * FROM employee""" cursor = conn
Bagaimana cara menampilkan data MongoDB di halaman HTML menggunakan Flask?Akun MongoDB harus dibuat. . Langkah 1. Buat kluster MongoDB. . Langkah 2. Buat pengguna basis data untuk MongoDB. . Langkah 3. Dapatkan URL untuk menghubungkan ke klaster MongoDB. . Langkah 4. Membuat aplikasi Flask. . Langkah 5. Buat halaman web untuk aplikasi Flask. . Langkah 6. Buat rute untuk operasi CRUD Bagaimana cara menampilkan file CSV di HTML Flask?Pada artikel ini, kita akan mengonversi file CSV menjadi tabel HTML menggunakan Python Pandas dan Flask Framework Contoh berkas CSV Langkah 1. Ciptakan lingkungan. . Langkah 2. Aktifkan lingkungan Langkah 3. Instal Flask dan Panda Langkah 1. Buat 'aplikasi. py' dan tulis kode yang diberikan di bawah ini |