python的crud库
django-beam的Python项目详细描述
django梁
Django Beam为您提供了一组视图、模板和最常见CRUD的集成 应用。
目标是拥有Django自己的管理员提供的功能,但要与其他前端代码集成。
该项目仍处于早期开发阶段。
大多数核心概念已经稳定下来,并正在生产中使用。然而 仍在继续进行更改
功能
- 基于类视图的crud操作
- 易于扩展
- 常见用例和流行的第三方软件包的扩展
文档
应该在https://django-beam.readthedocs.io/en/latest/
示例
# people/models.py
class Group(models.Model):
name = models.TextField()
class Person(models.Model):
name = models.TextField()
email = models.EmailField()
groups = models.ManyToManyField(Group)
# people/views.py
import beam
class PersonViewSet(beam.ViewSet):
fields = ['name', 'groups']
class GroupViewSet(beam.ViewSet):
fields = ['name']
# urls.py
urlpatterns += [
path('person/', include(PersonViewSet().get_urls())),
path('group/', include(GroupViewSet().get_urls())),
]
# settings.py
INSTALLED_APPS += [
"beam",
"beam.themes.bootstrap4", # or choose any theme you like
]
核心概念
除了标准django之外,还有一些部分需要理解才能使用beams。
第一个是viewsets。它们用于对单个模型的多个视图进行分组和配置(类似于
django-rest-framework
)。指定例如fields = ["name", "age"]
将把这些字段传递给指定模型的所有视图。它们还允许您通过设置例如update_fields = ["name"]
来指定和重写单个视图的配置。更新视图将仅限于名称。
下一个概念是组件。组件用于分组和传递相关属性
将视图集设置为各个视图。视图只传递其组件所期望的数据
__init__
。
视图集指出哪些属性应该传递给组件,并且还考虑了
具体的。如果同时指定fields
和detail_fields
,则detail组件将收到
后者,而所有其他组件将通过前者。
使用自定义组件
的示例下面是添加自定义视图的示例
class CustomerCallView(beam.views.ComponentMixin, MyBaseView):
phone = None
# your custom view code goes here ...
class CustomerViewSet(beam.ViewSet):
model = Customer
fields = ["first_name", "last_name", "email", "phone"]
call_component = Component
call_url = "call/{phone}/"
call_url_kwargs = ["phone"]
布局
表单布局
梁布局是提供窗体和详细视图的简单方法 一些结构没有使用自定义模板。 通过在视图集中指定三重嵌套列表,可以将字段分组到 行和列。默认主题最多支持每行4列。
layout = [
[ # first row
["name", "age",], # first column
["phone", "email",], # second column
]
[ # second row
["a", "b",], # first column
["c", "d",], # second column
]
]
固定图像
链接布局
beam在所有页面的顶部都显示到视图集中其他视图的链接
以及列表页中项目旁边。
为了指定哪些链接应该在详细信息页的顶部可见,
例如,可以指定detail_links = ["update", "...", "delete", "!create"]
。
这将导致create被隐藏,第一个链接指向update视图,最后一个链接指向
delete视图和所有其他组件将显示在这两者之间。
如果您希望创建视图是列表视图顶部显示的唯一视图,请设置
list_links = ["create"]
。要指定列表项旁边显示的链接,请设置list_item_links
。
内联线
class ContactDataInline(beam.RelatedInline):
fields = ["medium", "value"]
fk_field_name = 'person'
class PersonViewSet(beam.ViewSet):
create_inline_viewset_classes = []
inline_viewset_classes = [ContactDataInline]
主题
我们目前只发布一个主题。
beam.themes.bootstrap4
使用默认的引导v4标记并包含一个基本的引导css文件。为了使用bootstrap4主题,必须安装可选的依赖项
django-crispy-forms
并将其添加到设置中的INSTALLED_APPS
中。py:INSTALLED_APPS = (..., 'crispy_forms')
光束控制
我们包括一个beam.contrib
包,它提供了与几个第三方django应用程序的集成。
光束贡献反转
提供与django-reversion
集成的基本视图集。
用法
首先将reversion
和beam.contrib.reversion
添加到已安装的应用程序中。
使用beam.contrib.reversion.VersionViewSet
作为
需要反转或使用VersionViewSetMixin
的模型。
默认情况下,将跟踪创建和更新视图。您可以使用versioned_component_names
类属性来控制跟踪哪些组件。
如果您没有手动注册带有reversion的模型,那么VersionViewSet.model
将被注册
遵循为versioned_component_names
指定的所有内联线。
光束自动完成
提供了一个用于与^ {CD22>}集成的视图集MIXIN。
它也P提供一些与引导程序兼容的css来覆盖django自动完成灯光默认值。使用那些
您必须在django-autocomplete-light
之前将beam.contrib.autocomplete_light
添加到已安装的应用程序。
用法
将MIXIN添加到视图集,然后按项目文档使用^ {CD22>},用于 重写小部件指令的示例。
# settings.pyINSTALLED_APPS=["dal","beam.contrib.autocomplete_light","dal_select2",...]# views.pyimportbeamfrombeam.contrib.autocomplete_lightimportAutocompleteMixinclassGroupViewSet(AutocompleteMixin,beam.ViewSet):fields=['name']autocomplete_search_fields=["name"]# forms.pyfromdjangoimportformsfrompeople.modelsimportPersonfromdal_select2.widgetsimportModelSelect2MultipleclassPersonForm(forms.ModelForm):classMeta:model=Personfields=["name","email","groups"]widgets={"groups":ModelSelect2Multiple(url="people_group_autocomplete"),}