Automagic REST:基于底层PostgreSQL数据库的Django REST Framework代码生成器
项目描述
Automagic REST
Automagic REST是一个代码生成器,它将PostgreSQL数据库中的一组表构建为一个Django REST Framework只读环境的全功能Django应用程序。
这非常适用于特定的细分市场,但我们发现它通过检查PostgreSQL的information_schema
来构建基于我们从其他来源接收的数据集的RESTful API非常强大。
安装
要开始,请运行pip install automagic-rest
并将automagic_rest
添加到Django中的INSTALLED_APPS
设置。
配置和自定义
在Django中推荐设置一个二级数据库。以下示例中,我们将设置一个名为 my_pg_data
的数据库,用户名为 my_pg_user
。
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_path
的目录,其中包含 manage.py
文件。以下选项可以传递给该命令:
--database
(默认:my_pg_data
):Django数据库设置的DATABASES
中定义的Django数据库名称。--owner
(默认:my_pg_user
):拥有要处理的模式(schemata)的PostgreSQL用户名称。这通常与上述数据库的USER
设置相同。--path
(默认:data_path
):写入模型和序列化器的路径。每次运行命令时,此路径将被完全删除并重写,所以请小心!
示例:python manage.py build_data_models --database=my_data --owner=my_user --path=my_data_path
提供了一些方法,可以覆盖以自定义端点并使用自己的Django管理命令。
class automagic_rest.management.commands.build_data_models.Command
get_db
(默认:my_pg_data
):Django设置中我们将进行元数据检查的PostgreSQL数据库名称。
get_owner
(默认:my_pg_user
):我们将进行元数据检查的拥有者的PostgreSQL用户名称。
get_allowed_schemata
(默认:None
):如果设置,则返回要构建的数据库中的模式列表。如果为 None
,则选择特定用户的全部模式。
get_extra_sql
(默认:""
):如果设置,则将此方法返回的SQL附加到信息模式查询中。对于排除很有用。
get_root_python_path
(默认:data_path
):您希望写入模型、序列化器和路由的Python路径。**重要**:此路径将在每次运行构建命令时被擦除并重写。它应该是一个专用目录,其中不包含其他任何内容。
get_view
(默认:automagic_rest.views.GenericViewSet
):要使用的视图。
get_router
(默认:rest_framework.routers.DefaultRouter
):要使用的路由器。
get_max_digits_default
(默认:100):为未在PostgreSQL中显式设置的 NUMERIC
字段类型提供的 max_digits
数量。
get_decimal_places_default
(默认:25):为未在PostgreSQL中显式设置的 NUMERIC
字段类型提供的 decimal_places
数量。
sanitize_sql_identifier
:此方法接受一个字符串,并将其清理以注入SQL中,只允许字母数字和下划线。
metadata_sql
:此方法返回用于从PostgreSQL提取元数据以构建端点的SQL。
要自定义构建命令,以下是一个示例
# my_app/home/management/commands/my_build_data_models.py
from automagic_rest.management.commands import build_data_models
class Command(build_data_models.Command):
"""
My specific overrides for DRF PG Builder command.
"""
def get_db(self, options):
"""
Returns our customized Django DB name.
"""
return "my_data"
def get_owner(self, options):
"""
Returns our customized schema owner.
"""
return "my_user"
def get_root_python_path(self, options):
"""
Returns our customized build path.
"""
return "my_data_path"
def get_view(self):
"""
Returns our customized view path.
"""
return "my_app.views.MyDataViewSet"
def get_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
owned by the schema owner user.
"""
allowed_schemata = ['my_data', 'public_data']
return allowed_schemata
def get_extra_sql(self):
"""
Returns SQL to append to the information schema query.
In this example, we exclude any tables ending in "_old".
"""
return """
AND c.table_name NOT LIKE '%%_old'
"""
class views.GenericViewSet
视图有多个可覆盖的方法和属性。
属性
index_sql
:此属性定义SQL以返回当前表中的每个索引的第一列。这些将用于动态地使所有索引字段可搜索和可过滤。
方法
get_serializer_class_name
(默认:rest_framework.serializers.ModelSerializer
):要使用的序列化器类的完整路径。
get_permission
(默认:None
):返回用于端点的权限类。当保留为默认值 None
时,使用Django REST Framework设置的默认权限类。
get_estimate_count_limit
(默认:999_999
):为了防止长时间运行的 SELECT COUNT(*)
查询,视图通过检查查询计划来估计表中的行数。如果大于此数字,它将估计分页计数,以极大地提高速度。
在上面的例子之后,这是一个覆盖视图的示例,它设置了权限类型,并包含了一个用于命名Excel文件下载的mixin
from rest_framework.permissions import IsAuthenticated
from drf_excel.mixins import XLSXFileMixin
class MyGenericViewSet(XLSXFileMixin, GenericViewSet):
"""
"""
"""
Override the defaults from DRF PG Builder.
"""
filename = 'my_export.xlsx'
def get_permission(self):
return IsAuthenticated
文件构建完成后
运行构建命令后,你应该会创建一个目录,该目录是你定义的path
(或使用get_root_python_path()
覆盖)所包含的,其中包含模型、序列化和一个urls.py
文件。将urls.py
文件包含在你的Django项目路由中,你应该能够访问Django REST Framework可浏览的API。
已知问题
- 某些列类型不受支持,例如
ts_vector
和其他无法干净映射到RESTful类型的类型。
发行说明和贡献者
维护者
此包由 沃顿研究数据服务 的工作人员维护。我们很高兴 沃顿商学院 允许我们一定的时间为开源项目做出贡献。我们添加功能,因为这些功能对我们项目是必要的,并尽可能跟上问题和拉取请求。由于时间限制(我们的全职工作!),没有拉取请求的功能请求可能无法实现,但我们始终欢迎新想法,并对贡献和我们的包用户表示感谢。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
automagic-rest-1.1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 80da6b59514bacf427b6567aa64c02ddfdf9915219b0106e6779c40580f8fac9 |
|
MD5 | cbe9f9f5c297b16eebe1206a0cbbc70c |
|
BLAKE2b-256 | 17683fa81a9041f913f0c3a143544e043582ca9f26ae2f75f803819eb0dd2214 |