Simple and extensible admin interface framework for Flask
npx @tessl/cli install tessl/pypi-flask-admin@1.6.0Flask-Admin is a simple and extensible admin interface framework for Flask applications. It provides a flexible system for creating administrative interfaces with minimal code, supporting multiple ORMs including SQLAlchemy, MongoEngine, and Peewee, along with file management capabilities.
pip install flask-adminfrom flask_admin import Admin, BaseView, AdminIndexView, exposeFor model views with specific ORMs:
from flask_admin.contrib.sqla import ModelView as SQLAModelView
from flask_admin.contrib.mongoengine import ModelView as MongoModelView
from flask_admin.contrib.fileadmin import FileAdminFor actions and menu items:
from flask_admin.actions import action
from flask_admin.menu import MenuLinkfrom flask import Flask
from flask_admin import Admin, BaseView, expose
from flask_admin.contrib.sqla import ModelView
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///admin.db'
db = SQLAlchemy(app)
# Sample model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
email = db.Column(db.String(120), unique=True)
# Initialize admin
admin = Admin(app, name='My Admin', template_mode='bootstrap3')
# Add model view
admin.add_view(ModelView(User, db.session, name='Users'))
# Custom view
class CustomView(BaseView):
@expose('/')
def index(self):
return self.render('custom_template.html')
admin.add_view(CustomView(name='Custom Page', category='Tools'))
if __name__ == '__main__':
with app.app_context():
db.create_all()
app.run(debug=True)Flask-Admin follows a modular architecture built around several key concepts:
Admin class manages views and creates the admin interfaceBaseView) or model-based (ModelView)Main admin interface management including view registration, menu organization, and Flask application integration.
class Admin:
def __init__(
self,
app=None,
name=None,
url=None,
subdomain=None,
index_view=None,
translations_path=None,
endpoint=None,
static_url_path=None,
base_template=None,
template_mode=None,
category_icon_classes=None
): ...
def add_view(self, view): ...
def add_views(self, *args): ...
def init_app(self, app, index_view=None, endpoint=None, url=None): ...Foundation classes for creating custom admin views with routing, templating, and permission controls.
@expose(url='/', methods=('GET',))
def expose_decorator(url='/', methods=('GET',)): ...
class BaseView:
def __init__(
self,
name=None,
category=None,
endpoint=None,
url=None,
static_folder=None,
static_url_path=None,
menu_class_name=None,
menu_icon_type=None,
menu_icon_value=None
): ...
def is_accessible(self): ...
def render(self, template, **kwargs): ...Base model view functionality for database-driven admin interfaces with list, create, edit, delete operations.
class BaseModelView:
# Configuration attributes
list_columns = None
column_searchable_list = None
column_filters = None
form_columns = None
can_create = True
can_edit = True
can_delete = True
can_export = False
export_types = ['csv']Model Views and CRUD Operations
Advanced form system with custom field types, validation, and widget support for admin interfaces.
class BaseForm: ...
class SecureForm: ...
class DateTimeField: ...
class TimeField: ...
class Select2Field: ...
class Select2TagsField: ...
class JSONField: ...Complete SQLAlchemy ORM integration providing database model administration with relationships, filtering, and advanced querying.
from flask_admin.contrib.sqla import ModelView
class ModelView(BaseModelView):
def __init__(self, model, session, **kwargs): ...MongoDB document administration through MongoEngine ORM integration with embedded documents and NoSQL-specific features.
from flask_admin.contrib.mongoengine import ModelView, EmbeddedForm
class ModelView(BaseModelView): ...
class EmbeddedForm: ...File and directory administration interface with upload, download, edit, and file browser capabilities.
from flask_admin.contrib.fileadmin import FileAdmin, LocalFileStorage
class FileAdmin(BaseFileAdmin):
def __init__(self, base_path, *args, **kwargs): ...
class LocalFileStorage:
def __init__(self, base_path): ...Batch action system for performing operations on multiple selected items in model views.
@action(name, text, confirmation=None)
def action_decorator(name, text, confirmation=None): ...
class ActionsMixin:
def handle_action(self, return_view=None): ...
def is_action_allowed(self, name): ...Utility functions for form handling, URL generation, security, and template context management.
def get_current_view(): ...
def is_safe_url(target): ...
def flash_errors(form, message): ...
def prettify_class_name(name): ...Helper Functions and Utilities
Interactive Redis console providing web-based command execution for Redis database administration.
from flask_admin.contrib.rediscli import RedisCli
class RedisCli(BaseView):
def __init__(self, redis, name=None, category=None, endpoint=None, url=None): ...Geographic data support through GeoAlchemy2 integration with interactive map widgets for spatial database administration.
from flask_admin.contrib.geoa import ModelView
from flask_admin.contrib.geoa.fields import GeoJSONField
from flask_admin.contrib.geoa.widgets import LeafletWidget
class ModelView(SQLAModelView): ...
class GeoJSONField(JSONField): ...
class LeafletWidget(TextArea): ...Google App Engine datastore integration supporting both legacy DB API and modern NDB API models.
from flask_admin.contrib.appengine import ModelView
from flask_admin.contrib.appengine.view import NdbModelView, DbModelView
def ModelView(model): ...
class NdbModelView(BaseModelView): ...
class DbModelView(BaseModelView): ...Flexible menu system supporting categories, links, icons, and hierarchical navigation structures.
class MenuLink:
def __init__(
self,
name,
url=None,
endpoint=None,
category=None,
class_name=None,
icon_type=None,
icon_value=None,
target=None
): ...