Hallo guys, kalau kemarin kita membahas tentang penggunaan ORM SQLAlchemy di Flask, sekarang kita akan membahas tentang penggunaan Flask Admin. Apa itu Flask-Admin?
Sebagaimana SQLAlchemy, Flask-admin adalah salah satu library yang cukup populer. Flask-Admin dipakai untuk melakukan operasi CRUD pada database. Dengan menggunakan Flask-Admin kita tidak perlu melakukan coding from stratch karena fungsi2 CRUD sudah disediakan dan kita tinggal pakai. Langsung saja, mari kita berkenalan dengan flask-admin.
Persiapan Penggunaan Flask-Admin
Sebelum menggunakan Flask-Admin, tentu langkah pertama yang harus dilakukan adalah menginstallnya. Cukup mudah, jalankan perintah pip install flask-admin, maka library ini sudah bisa digunakan.
$ pip install flask-admin
Setelah berhasil install, langkah berikutnya adalah inisiasi flask-admin. Caranya cukup mudah, kita hanya perlu beberapa baris berikut.
from flask_admin import Admin from flask_admin.contrib.sqla import ModelView app.config['FLASK_ADMIN_SWATCH'] = 'cerulean' admin = Admin(app, name='Blog', template_mode='bootstrap4')
Mendaftarkan Model view Model View
Agar bisa memanfaatkan flask-admin kita harus mendaftarkan model yang sudah kita buat ke Model-View nya flask-admin. Berikut contoh script yang bisa digunakan.
class CiPostsView(ModelView):
extra_js = ['//cdn.ckeditor.com/4.6.0/standard/ckeditor.js']
def tgl_formatter(view, context, model, name):
field = getattr(model, name)
return field.strftime('%d/%m/%Y %H:%M:%S')
column_formatters = {
'post_date': tgl_formatter,
}
column_labels = {'category_name': 'Kategori', 'author':'Penulis', 'post_title':'Judul', 'post_date': 'Tanggal Input'}
column_list = ['category_name', 'author', 'post_title', 'post_date']
form_columns = ['category_name', 'author', 'post_title', 'post_content']
form_overrides = {
'post_content': CKTextAreaField,
}
admin.add_view(CiPostsView(Ci_posts, db.session, 'Posts'))
Pada kode diatas, kita membuat class CiPostView yang di extend dari ModelView. Fungsi add_view digunakan untuk meregister model Ci_posts ke ModelView CiPostsView. Parameter Posts digunakan untuk mengeset caption yang ada di menu admin.
admin.add_view(CiPostsView(Ci_posts, db.session, 'Posts'))
parameter column_labels digunakan untuk memberikan caption pada judul kolom list di ModelView. Sedangkan parameter column_list digunakan untuk menampilkan daftar kolum apa saja yang akan kita tampilkan di list.
Jika kita ingin menampilkan data sebuah kolom dengan format tertentu, kita bisa menggunakan parameter column_formatter yang di binding dengan fungsi untuk memformat tampilan. Pada kode diatas, kita akan menampilkan tanggal dengan format dd/mm/yyyy H:i:s maka dibuatlah fungsi tgl_formatter. Jika dijalankan, berikut tampilan list tabel posting.
Untuk mengatur form ketika edit/update kita bisa menggunakan parameter form_columns. Jika kita ingin menyertakan CKEditor pada column bertipe text, kita bisa menggunakan form_overrides. Pada script diatas, kita mengeset tampilan column post_content agar menerapkan CKEditor. Yang perlu kita lakukan adalah menginstall library wtforms, mengimportnya pada modul app dan mengoverrides column post_content dengan konstanta CKTextAreaField.
$ pip install wtforms
from wtforms import TextAreaField from wtforms.widgets import TextArea
Jika dijalankan di browser, akan muncul tampilan seperti berikut.
Error yang sering muncul di Flask-admin
The session is unavailable because no secret
RuntimeError: The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.
Solusi:
Tambahkan SECRET_KEY di parameter config.
app.config['SECRET_KEY'] = '*****'
UndefinedError: ‘current_user’ is undefined
Solusi:
- install flask-login
pip install flask-login
- inisiasi login
login = LoginManager(app)
Exception: Missing user_loader or request_loader
Solusi:
Tambahkan fungsi user_loader seperti berikut
@login.user_loader
def load_user(id):
return Ci_users.query.get(int(id))
Fullstack Developer yang tinggal di yogyakarta. Suka eksplorasi hal baru yang berhubungan dengan pemrograman dan ilmu keislaman. Berpengalaman dalam pemrograman PHP, Delphi dan sedang upgrade skill dengan python. Just as simple that.