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_digitsdecimal places来自information_schema.columns字段。

0.1.1

  • 切换到具有schema\u nametable\u name组合的命名模型和序列化程序,以避免django中的模型命名冲突(如果同一个表跨多个schema存在)。

0.1.0

  • 初始版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Jetty中的java Set AccessControlAllowOrigin   java我已将我的apk上传到google play,但没有显示任何设备兼容   在内存中创建mdb副本时发生java错误   是否有类似jQuery的选择器用于JavaXML解析?   C++不能使用JNI使用外部java类   java如何创建jpql查询以获取没有关联父级的实体   maven如何重新部署java web app cargo   java如何使用Gson将嵌套的json对象添加到文件中?   用于inputfield的java Sencha GXT自定义货币格式   java在容器上设置游标,而不更改子组件的游标   java JDBI使用fluent接口选择(非对象查询)   安卓 Firebase runTransaction不工作MutableData为空   java如何修复快速排序代码   java正则表达式验证密码,密码只接受固定长度之间的值   javascript拆分值并以格式化方式显示   java Asynctask:doInBackground中Asynctask和process的两个值