-
Notifications
You must be signed in to change notification settings - Fork 0
Description
基本框架应用程序
<your project name>/
config.py :所有 的 应用程序的配置
__init__.py :应用程序的初始化
models.py :声明 你的 数据库 模型 在这里
views.py :实现你的视图
- 创建简单的联系人应用程序 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.nameContacts 表
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
`