Simple and rapid application development framework, built on top of Flask, with detailed security, auto CRUD generation, and comprehensive UI components.
npx @tessl/cli install tessl/pypi-flask-appbuilder@4.8.0A rapid application development framework built on top of Flask that provides a comprehensive set of tools for building database-driven web applications with authentication, authorization, forms, charts, and REST APIs. Flask-AppBuilder enables developers to quickly create sophisticated web applications with minimal code by providing pre-built components for common web application patterns.
pip install Flask-AppBuilderfrom flask_appbuilder import AppBuilderCommon imports for building applications:
from flask_appbuilder import (
AppBuilder, BaseView, ModelView, IndexView,
Model, SQLA, expose, has_access, action
)API-focused imports:
from flask_appbuilder.api import ModelRestApi, expose as api_expose
from flask_appbuilder.security.decorators import protectfrom flask import Flask
from flask_appbuilder import AppBuilder, SQLA
from flask_appbuilder.models.sqla import Model
from sqlalchemy import Column, Integer, String
# Initialize Flask app and database
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLA(app)
# Create a simple model
class Person(Model):
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
email = Column(String(120), unique=True, nullable=False)
def __repr__(self):
return self.name
# Initialize AppBuilder
appbuilder = AppBuilder(app, db.session)
# Create database tables
db.create_all()
if __name__ == '__main__':
app.run(debug=True)from flask_appbuilder import ModelView
from flask_appbuilder.models.sqla.interface import SQLAInterface
class PersonModelView(ModelView):
datamodel = SQLAInterface(Person)
list_columns = ['name', 'email']
# Register view with AppBuilder
appbuilder.add_view(
PersonModelView,
"List Persons",
icon="fa-address-book-o",
category="Contacts",
)from flask_appbuilder.api import ModelRestApi
class PersonApi(ModelRestApi):
datamodel = SQLAInterface(Person)
list_columns = ['id', 'name', 'email']
show_columns = ['id', 'name', 'email']
add_columns = ['name', 'email']
edit_columns = ['name', 'email']
# Register API
appbuilder.add_api(PersonApi)Flask-AppBuilder follows a layered architecture that promotes separation of concerns and extensibility:
This architecture enables rapid development while maintaining flexibility for customization and extension.
Foundation classes and application management including AppBuilder initialization, view registration, security setup, and application lifecycle management.
class AppBuilder:
def __init__(app, session, menu=None, indexview=None): ...
def add_view(baseview, name, href="", icon="", label="", category=""): ...
def add_api(baseview): ...
def init_app(app, session): ...
class BaseView:
def render_template(template, **kwargs): ...
def create_blueprint(appbuilder, endpoint=None, static_folder=None): ...Authentication, authorization, and security decorators providing user management, role-based permissions, and access control for views and APIs.
@has_access
def secure_method(self): ...
@protect(allow_browser_login=False)
def api_method(self): ...
@permission_name("custom_permission")
def method_with_custom_permission(self): ...Complete REST API framework with automatic CRUD operations, OpenAPI documentation, schema generation, and JSON serialization.
class ModelRestApi(BaseModelApi):
def get_list(**kwargs): ...
def get(pk, **kwargs): ...
def post(): ...
def put(pk): ...
def delete(pk): ...
def info(**kwargs): ...SQLAlchemy integration with enhanced models, database interfaces, and application factory support for flexible database management.
class Model:
def to_json(): ...
class SQLA(SQLAlchemy):
def create_session(options): ...
def make_declarative_base(model, metadata): ...Model views with automatic CRUD operations, form generation, validation, pagination, searching, and filtering capabilities.
class ModelView(BaseCRUDView):
datamodel = SQLAInterface(Model)
list_columns = ['field1', 'field2']
show_columns = ['field1', 'field2', 'field3']
add_columns = ['field1', 'field2']
edit_columns = ['field1', 'field2']Custom form fields, widgets, and form handling including AJAX select fields, query fields, and specialized input widgets.
class AJAXSelectField(Field): ...
class QuerySelectField(SelectFieldBase): ...
class FormWidget(RenderTemplateWidget): ...Data visualization with chart views supporting pie charts, bar charts, line charts, and custom aggregation functions.
class GroupByChartView(BaseChartView):
chart_type = "ColumnChart"
group_bys = ['field']
@aggregate(label="Total")
def aggregate_sum(items, col): ...Command-line interface for user management, database operations, security management, and application maintenance.
# Flask CLI commands
flask fab create-admin
flask fab create-user
flask fab reset-password
flask fab create-db
flask fab list-usersAction decorators for bulk operations and lifecycle hooks for customizing create, update, and delete operations.
@action("approve", "Approve", "Approve selected items?", "fa-check")
def approve_action(self, items): ...
def pre_add(self, item): ...
def post_update(self, item): ...Framework constants, authentication types, API configuration, and comprehensive exception classes for error handling.
# Authentication constants
AUTH_DB = 1
AUTH_LDAP = 2
AUTH_OAUTH = 4
# Exception classes
class FABException(Exception): ...
class InvalidLoginAttempt(FABException): ...