Flask-AppBuilder快速入门:模型视图开发指南

Flask-AppBuilder快速入门:模型视图开发指南

Flask-AppBuilder Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, google charts and much more. Demo (login with guest/welcome) - http://flaskappbuilder.pythonanywhere.com/ Flask-AppBuilder 项目地址: https://gitcode.com/gh_mirrors/fl/Flask-AppBuilder

概述

Flask-AppBuilder(简称FAB)是一个基于Flask的快速应用开发框架,它提供了丰富的功能来简化Web应用的创建过程。本文将重点介绍如何使用FAB的模型视图功能快速构建一个联系人管理应用。

项目结构

使用FAB创建的项目通常具有以下目录结构:

项目名称/
    config.py        # 应用配置文件
    app/
        __init__.py  # 应用初始化文件
        models.py    # 数据库模型定义
        views.py     # 视图定义

模型定义

基础模型类

FAB提供了Model基类,它与Flask-SQLAlchemy的db.Model类似,但更适合与FAB集成。建议所有模型都继承自这个基类。

联系人分组模型

首先定义一个联系人分组模型ContactGroup

from sqlalchemy import Column, Integer, String
from flask_appbuilder import Model

class ContactGroup(Model):
    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique=True, nullable=False)
    
    def __repr__(self):
        return self.name

联系人模型

接着定义联系人模型Contact

from sqlalchemy import Column, Integer, String, ForeignKey, Date
from sqlalchemy.orm import relationship

class Contact(Model):
    id = Column(Integer, primary_key=True)
    name = Column(String(150), unique=True, nullable=False)
    address = Column(String(564), default='Street ')
    birthday = Column(Date)
    personal_phone = Column(String(20))
    personal_cellphone = Column(String(20))
    contact_group_id = Column(Integer, ForeignKey('contact_group.id'))
    contact_group = relationship("ContactGroup")
    
    def __repr__(self):
        return self.name

注意模型字段的属性:

  • unique=True:确保值唯一
  • nullable=False:不允许为空
  • default='Street ':设置默认值

视图定义

基础视图类

FAB提供了ModelView类,它实现了基本的CRUD(创建、读取、更新、删除)功能。

分组视图

定义分组视图GroupModelView

from flask_appbuilder import ModelView
from flask_appbuilder.models.sqla.interface import SQLAInterface

class GroupModelView(ModelView):
    datamodel = SQLAInterface(ContactGroup)
    related_views = [ContactModelView]

联系人视图

定义联系人视图ContactModelView

class ContactModelView(ModelView):
    datamodel = SQLAInterface(Contact)
    
    label_columns = {'contact_group': 'Contacts Group'}
    list_columns = ['name', 'personal_cellphone', 'birthday', 'contact_group']
    
    show_fieldsets = [
        ('Summary', {'fields': ['name', 'address', 'contact_group']}),
        ('Personal Info', {
            'fields': ['birthday', 'personal_phone', 'personal_cellphone'],
            'expanded': False
        }),
    ]

视图配置选项:

  • label_columns:自定义列显示名称
  • list_columns:控制列表页显示的列
  • show_fieldsets:定义详情页的字段分组

视图注册

在应用初始化时注册视图:

db.create_all()  # 创建数据库表

appbuilder.add_view(
    GroupModelView,
    "List Groups",
    icon="fa-folder-open-o",
    category="Contacts",
    category_icon="fa-envelope"
)

appbuilder.add_view(
    ContactModelView,
    "List Contacts",
    icon="fa-envelope",
    category="Contacts"
)

安全特性

FAB会自动为每个模型视图创建以下权限:

  • can_list
  • can_show
  • can_add
  • can_edit
  • can_delete
  • can_download

这些权限会被自动添加到管理员角色中。

高级视图类型

除了基本的ModelView,FAB还提供了几种特殊视图:

多视图(MultipleView)

在同一个页面显示多个视图:

from flask_appbuilder import MultipleView

class MultipleViewsExp(MultipleView):
    views = [GroupModelView, ContactModelView]

主从视图(MasterDetailView)

实现主从关系的数据展示:

from flask_appbuilder import MasterDetailView

class GroupMasterView(MasterDetailView):
    datamodel = SQLAInterface(ContactGroup)
    related_views = [ContactModelView]

REST API

FAB自动为每个模型视图生成REST API端点,包括:

  • /api - 获取API信息
  • /api/read - 查询数据
  • /api/create - 创建记录
  • /api/update - 更新记录
  • /api/delete - 删除记录

总结

通过Flask-AppBuilder,开发者可以用极少的代码快速构建功能完善的Web应用。本文介绍的联系人管理应用示例展示了FAB的核心功能,包括模型定义、视图配置、安全控制和API生成等。FAB的这些特性使其成为快速开发管理后台类应用的理想选择。

Flask-AppBuilder Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, google charts and much more. Demo (login with guest/welcome) - http://flaskappbuilder.pythonanywhere.com/ Flask-AppBuilder 项目地址: https://gitcode.com/gh_mirrors/fl/Flask-AppBuilder

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高慈鹃Faye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值