Skip to content

Flask AppBuilder Model Views #13

@suoutsky

Description

@suoutsky

基本框架应用程序

<your project name>/
config.py :所有  应用程序的配置

__init__.py :应用程序的初始化
models.py :声明 你的 数据库 模型 在这里
views.py :实现你的视图
  1. 创建简单的联系人应用程序 FAB使用优秀的SQLAlchemy ORM包及其Flask扩展
    在我们的示例应用程序,我们要定义两个表,一个联系表,将持有该联系人的详细信息,以及一个ContactGroup表组我们的接触或分类。 我们可以另外定义一个“ 性别”表,为“男性”和“女性”提供枚举值的作用。
    在我们的示例应用程序,我们要定义两个表,一个联系表,将持有该联系人的详细信息,以及一个ContactGroup表组我们的接触或分类。 我们可以另外定义一个“ 性别”表,为“男性”和“女性”提供枚举值的作用。

定义你的模型(models.py)

ContactGroup模型。

from sqlalchemy import Column, Integer, String, ForeignKey, Date
from sqlalchemy.orm import relationship
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

Contacts 表

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

请注意,此处使用的SqlAlchemy属性如“unique”,“nullable”和“default”将具有特殊处理。在这种情况下,当添加新的联系人时,如果具有相同名称的人已经存在, 将会进行查询以进行验证。与空名称的联系人将不被允许。列类型已验证。地址字段将包含“Street”作为默认值。您也可以添加自己的自定义验证,看高级配置

定义您的Views(views.py)

现在我们来定义我们对ContactGroup模型的看法。此视图将为您的模型定义设置创建,删除,更新和显示原语的功能。

我们从继承模型视图类,它继承BaseCRUDView,这本身从继承BaseModelView,这样你就可以覆盖其所有的公共属性来配置你的CRUD原语的许多细节

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

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

必需属性:

datamodel: 是db抽象层。使用您的视图模型进行初始化。
可选属性:
related_views: 如果你想在显示主/详细查看和编辑。f.a.b.将涉及1 / n的关系,自动,它会显示一个选项卡显示或编辑视图(或手风琴)与列表相关的记录。你也可以联系图表。

我们定义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: 定义您的列的标签。框架将为您定义缺少的一个,使用漂亮版本的列名称。
一个字段集(Django样式)。您可以使用show_fieldsets,add_fieldsets,edit_fieldsets自定义节目,独立添加和编辑视图

`
ModelView的基类,所有属性都是继承自定义ModelView覆盖此属性

add_columns=None
要在添加表单视图中显示的列(或模型的方法)列表。用它来控制显示的顺序

add_exclude_columns=None
要从添加表单中排除的列的列表。默认情况下,包括所有列。

edit_columns=None
要在编辑表单视图中显示的列(或模型的方法)列表。用它来控制显示的顺序

edit_exclude_columns=None
要从编辑表单中排除的列的列表。默认情况下,包括所有列。

list_columns=None
要在列表视图中显示的列(或型号的方法)列表。用它来控制显示的顺序

show_columns=None
在显示视图中显示的列(或型号的方法)列表。用它来控制显示的顺序

show_exclude_columns=None
要从展示视图中排除的列的列表。默认情况下,包括所有列。
`

`
ModelView和ChartView的基类,所有属性都是继承自定义ModelView和ChartView覆盖此属性

此类支持查询的所有基础

search_columns = None
列出允许的搜索列,如果没有提供,将使用所有可能的搜索列。如果要限制搜索(过滤器)列的可能性,请使用模型中的列名列表定义它们:

class MyView(ModelView):
datamodel = SQLAInterface(MyTable)
search_columns = ['name','address']

search_exclude_columns = None
列表,其列将从搜索中排除。搜索默认包含所有可能的列 您可以轻松使用内置的替代外观,使用小部件查看小部件示例。

登记(views.py)
呈现模型并创建菜单。
使用create_all来创建你的模型。

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")

您可以在以下网址找到此示例:https://github.com/dpgaspar/Flask-AppBuilder/tree/master/examples/quickhowto
`

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions