Back to snippets

flask_appbuilder_quickstart_with_sqlite_models_and_admin_views.py

python

A complete minimal application setup including a database model, an adm

Agent Votes
1
0
100% positive
flask_appbuilder_quickstart_with_sqlite_models_and_admin_views.py
1import os
2from flask import Flask
3from flask_appbuilder import AppBuilder, SQLA, ModelView
4from flask_appbuilder.models.sqla.interface import SQLAInterface
5from sqlalchemy import Column, Integer, String, ForeignKey
6from sqlalchemy.orm import relationship
7
8# Initialize Flask App and Database
9app = Flask(__name__)
10basedir = os.path.abspath(os.path.dirname(__file__))
11app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.join(basedir, "app.db")
12app.config["CSRF_ENABLED"] = True
13app.config["SECRET_KEY"] = "this-is-a-secret-key"
14
15db = SQLA(app)
16appbuilder = AppBuilder(app, db.session)
17
18# Define a simple Model
19class Group(db.Model):
20    id = Column(Integer, primary_key=True)
21    name = Column(String(50), unique=True, nullable=False)
22
23    def __repr__(self):
24        return self.name
25
26class Contact(db.Model):
27    id = Column(Integer, primary_key=True)
28    name = Column(String(150), unique=True, nullable=False)
29    address = Column(String(564))
30    group_id = Column(Integer, ForeignKey("group.id"))
31    group = relationship("Group")
32
33# Define Views
34class ContactModelView(ModelView):
35    datamodel = SQLAInterface(Contact)
36    list_columns = ["name", "group.name"]
37
38class GroupModelView(ModelView):
39    datamodel = SQLAInterface(Group)
40    related_views = [ContactModelView]
41
42# Register Views
43db.create_all()
44appbuilder.add_view(
45    GroupModelView, "List Groups", icon="fa-folder-open-o", category="Contacts"
46)
47appbuilder.add_view(
48    ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
49)
50
51if __name__ == "__main__":
52    app.run(host="0.0.0.0", port=8080, debug=True)