Flask-AppBuilder 快速入门
1. 作用
基于 Flask 框架的, 可以快速构建包含权限管理、 CRUD 视图模型及 API 的后台管理系统的 Web 开发框架。 (类 Django)
仓库地址: https://github.com/dpgaspar/F...
2. 项目结构
.
+-- app
| +-- templates # 模板文件
| +-- translations # 国际化文件
| +-- __init__.py
| +-- apis.py # 资源API文件(自建)
| +-- models.py # 数据模型文件
| +-- views.py # 视图文件
+-- .gitignore
+-- config.py # 配置文件
+-- README.rst # 说明文档
+-- run.py # 程序入口
3. 环境配置阶段
3.1 安装
pip install flask-appbuilder
3.2 初始化
使用以下命令初始化一个 flask 应用
flask fab create-app
然后创建管理员用户
cd first_app
flask fab create-admin
3.3 运行
flask run
4.基本使用
4.1 常用配置
- 应用名称
- 修改数据库地址
- 修改认证方式
- 主题配置
APP_NAME = "My App Name"
SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(basedir, "app.db")
AUTH_TYPE = AUTH_DB
APP_THEME = "bootstrap-theme.css"
4.2 添加简单视图
在 views.py 文件中添加 MyView 类, 并将 MyView 添加上应用路由之上.
其中路由地址为 route_base
+ expose
has_access
为接口权限设置 (具体的权限需要根据继承的 View 和 User Role 决定)
from flask_appbuilder import AppBuilder, expose, BaseView
from app import appbuilder
from flask_appbuilder import has_access
class MyView(BaseView):
route_base = '/index'
@expose('/hello')
def hello(self):
return 'Hello World'
@expose('/message/')
@has_access
def message(self, msg):
msg = 'Hello' + msg
return msg
appbuilder.add_view_no_menu(MyView())
4.3 定义有返回模板的视图
添加 welcome 视图函数
class indexView(BaseView):
route_base = '/index'
@expose('/hello')
def hello(self):
return 'Hello World'
@expose('/message/')
@has_access
def message(self, msg):
msg = 'Hello' + msg
return msg
@expose('/welcome/')
@has_access
def welcome(self, msg):
msg = 'Hello %s' % (msg)
return self.render_template('index.html', msg=msg)
添加 index.html 模板至 templates 文件夹下
{% extends "appbuilder/base.html" %}
{% block content %}
{{ msg }}
{% endblock %}
重启服务访问 http://localhost:8080/index/w... 即可看到对应的模板页面
4.4 定义数据库模型
在 models.py 中定义数据模型
class Book(Model):
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
def __repr__(self):
return self.name
4.5 定义模型对应的后台管理视图
在 views.py 中定义 ModelView
class BookModelView(ModelView):
datamodel = SQLAInterface(Book)
appbuilder.add_view(BookModelView, "List Books", icon="fa-address-card-o", category="Books")
重启服务可以在后台页面看到 Books 一栏
4.6 定义模型对应的API视图
新建 apis.py 在 app 目录下, 并且创建 BookModelApi 类添加至 appbuilder 中
class BookModelApi(ModelRestApi):
resource_name = 'book'
datamodel = SQLAInterface(Book)
appbuilder.add_api(BookModelApi)
重启服务可以在 http://localhost:8080/swagger/v1 中看到自动生成的 RESTAPI