跳转到主要内容

Automagic REST:基于底层PostgreSQL数据库的Django REST Framework代码生成器

项目描述

Automagic REST

pypi

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 (16.3 kB 查看哈希值)

上传时间 源代码

构建分发

automagic_rest-1.1.0-py3-none-any.whl (15.3 kB 查看哈希值)

上传时间 Python 3

支持者