automagic rest:django rest framework postgresql生成器
automagic-rest的Python项目详细描述
automagic rest
automagic rest为postgresql数据库中的一组表自动构建一个完整的django应用程序作为django rest框架只读环境。
这在很大程度上是一个繁重的开发过程,从一个生产系统中提取出来,并被通用为开源版本。
安装
要开始,请pip安装automagic rest
并将automagic rest
添加到django中的已安装的应用程序设置中。
配置和定制
建议在Django中设置辅助数据库。对于以下示例,我们将设置一个名为"我的pgu数据"的用户我的pgu用户
:
DATABASES={'default':{'ENGINE':'django.db.backends.postgresql','NAME':'pg_web_db','USER':'web_user','PASSWORD':'','HOST':'pg-web.domain.com',},'my_pg_data':{'ENGINE':'django.db.backends.postgresql','NAME':'pg_data_db','USER':'my_pg_user','PASSWORD':'','HOST':'pg-data.domain.com',},}
默认情况下,automagic rest将在django项目的根目录中创建一个名为data\u path
的目录,其中manage.py
存在。以下选项可以传递给命令:
--数据库
(默认值:My_pg_data
):在数据库
设置中定义的Django数据库的名称。--owner
(默认值:my_pg_user
):拥有要处理的架构的PostgreSQL用户的名称。这通常与上述数据库的数据库设置中的
用户
相同。--path
(默认值:数据路径
):要将模型和序列化程序写入的路径。每当命令运行时,此路径将被完全删除和重写,因此请小心!
示例:python manage.py构建数据模型--数据库=我的数据--所有者=我的用户--路径=我的数据路径
提供了一些方法,可以重写这些方法以使用您自己的django管理命令自定义端点。
类automagic_rest.management.commands.build_data_models.command
获取数据库
(默认值:我的pgu数据
):在django的设置中postgresql数据库的名称,我们将对其进行反思以构建api。
get_owner
(默认值:my_pg_user
):拥有我们要内省的架构的PostgreSQL用户的名称。
获取允许的架构
(默认值:无
):如果已设置,则返回要生成的数据库中架构的列表。如果无
,则为特定用户选择所有模式。
get_root_python_path
(默认值:data_path
):要在其中编写模型、序列化程序和路由的python路径。重要信息:每次运行生成命令时,都会擦除并重新写入此路径。它应该是一个专用目录,没有其他内容。
获取视图
(默认值:automagic\u rest.views.genericViewset
):要使用的视图。
获取路由器
(默认值:rest\u framework.routers.default router
):要使用的路由器。
get_max_digits_default
(默认值:100):用于提供在PostgreSQL中未显式设置的字段类型的max_digits
。
获取小数位数默认值
(默认值:25):提供在PostgreSQL中未显式设置的字段类型的小数位数。
清理sql标识符
:此方法接受一个字符串,并清理该字符串以便注入sql,只允许使用字母数字和下划线。
元数据SQL
:此方法返回用于从PostgreSQL中提取元数据以生成终结点的SQL。
要自定义build命令,下面是一个示例:
# my_app/home/management/commands/my_build_data_models.pyfromautomagic_rest.management.commandsimportbuild_data_modelsclassCommand(build_data_models.Command):""" My specific overrides for DRF PG Builder command. """defget_db(self,options):""" Returns our customized Django DB name. """return"my_data"defget_owner(self,options):""" Returns our customized schema owner. """return"my_user"defget_root_python_path(self,options):""" Returns our customized build path. """return"my_data_path"defget_view(self):""" Returns our customized view path. """return"my_app.views.MyDataViewSet"defget_allowed_schemata(self,options,cursor):""" Return a list of allowed schemata we want to create RESTful endpoints for. If None, will create endpoints for all schemata owner the the schema owner user. """allowed_schemata=['my_data','public_data']returnallowed_schemata
类视图.genericViewset
视图有几个方法和属性,这些方法和属性也可以重写。
属性
index_sql
:此属性定义SQL,以返回模型当前表的每个索引中的第一列。这些将用于动态地使所有索引字段可搜索可过滤。
方法
get_serializer_class_name
(默认值:rest_framework.serializer.modelserializer
):要使用的序列化程序类的完整路径。
获取权限
(默认值:无
):返回要用于终结点的权限类。当缺省值为none
时,使用django rest framework设置的默认权限类。
get_estimate_count_limit
(默认值:999_999
):为了防止长时间运行的select count(*)
查询,视图通过检查查询计划来估计表中的行数。如果大于此数字,它将估计分页计数,以大大提高速度。
为了遵循上面的示例,下面是一个重写视图的示例,该视图设置权限类型并包含一个mixin,用于命名Excel文件下载:
fromrest_framework.permissionsimportIsAuthenticatedfromdrf_renderer_xlsx.mixinsimportXLSXFileMixinclassMyGenericViewSet(XLSXFileMixin,GenericViewSet):""" """""" Override the defaults from DRF PG Builder. """filename='my_export.xlsx'defget_permission(self):returnIsAuthenticated
文件生成后
运行build命令后,您应该创建一个目录,该目录定义为path
(或使用get_root_python_path()
重写),其中包含模型、序列化程序和url.py
文件。在django项目的路由中包含urls.py
文件,您应该能够访问django rest framework可浏览api。
发行说明
0.2.2
- 确保字段类型
数值
填充的默认值。
0.2.1
- 动态地从python中提取保留字列表。
0.2.0
- 重构以使用动态创建的泛型序列化程序。如果重写
build_data_models
命令的get_serializer
方法,则这可能是一个突破性的更改。- 这已被名为
get_serializer_class_name
的视图方法所取代。 - 序列化程序现在是动态生成的,而不是由代码生成器生成的。
- 这已被名为
0.1.2
- 添加对
decimalfield
的支持,其中max_digits
和decimal places
来自information_schema.columns
字段。
0.1.1
- 切换到具有
schema\u name
和table\u name
组合的命名模型和序列化程序,以避免django中的模型命名冲突(如果同一个表跨多个schema存在)。
0.1.0
- 初始版本。