关于构建不断增长的Django项目的建议(模型和API)

时间:2016-07-25 14:31:34

标签: python django django-rest-framework

我正在努力改进我公司内部使用的Django项目。该项目正在迅速发展,因此我现在正试图在重构无法管理之前做出一些设计选择。现在,项目有两个非常重要的模型,数据库中支持项目中每个应用程序的其余数据通过各种单独的ETL过程添加到数据库中。因此,应用程序中使用的大多数数据都是通过SQLAlchemy在每个视图中使用直线多线字符串查询,并在渲染时通过上下文参数传递给视图,而不是使用Django ORM。

为通过ETL流程填充的所有表构建模型是否有明显的优势,因此我可以开始使用Django ORM与使用SQLAlchemy和查询字符串?

我认为开始构建API而不是通过上下文参数将大量信息传递到单个视图也是有意义的,但我不确定如何构建API。我读过有些人创建了一个名为API的完全独立的应用程序,并使其中的所有视图都返回一个JsonResponse。我也读过其他人做这个相同的基于视图的API,但他们只是在他们的Django项目的每个应用程序中包含一个api.py文件。其他人使用Django REST API框架,这看起来很简单但比通过视图返回JsonResponse稍微复杂一些。实际上只有一个地方用户交互可以做任何事情,但GET数据来自数据库,项目的那部分使用Django REST Framework来执行CRUD操作。话虽如此:

这些API结构中哪一个是最典型的,通过将JsonResponse视图作为API实现与使用Django REST框架相比,我获得/失去了什么?

提前感谢您提供有关这些问题的任何资源或建议。如果我可以添加任何其他背景,请告诉我。

3 个答案:

答案 0 :(得分:2)

  

为所有人建立模型是否会有明显的优势   通过ETL过程填充的表,以便我可以开始使用   Django ORM vs使用SQLAlchemy和查询字符串?

是的,是一种集中,一致的访问数据的方式,当然,对项目的依赖性较小。

  

这些API结构中哪一个是最典型的,我该怎么做   通过将JsonResponse视图作为API实现获得/失败与使用   Django REST框架?

一般而言,JSON用于数据,REST用于API。你提到Django-REST已经在使用,所以如果有一个REST API有任何明显的好处,我会选择它

答案 1 :(得分:0)

我会在第二次@ Av4t4r声明中为“遗产”建立模型。列强制执行:

  

"一种集中,一致的访问数据的方式,当然,减少对项目的依赖。"

此外,这还允许您在模型上定义方法,以提供一致的修改/检查数据的方式

您可以在模型上编写大量validate()函数来检查某些字段的有效性,或者可能是clean()函数,它可以执行以下操作:从phone_number中删除非数字字段'一个实例化的对象。

不要从头开始构建这些模型,只需运行:

python manage.py inspectdb > models.py

...从shell自动生成项目数据库的模型。

对于那些使用SQLAlchemy定义模型的人来说

结帐sqlacodegen。它将从任何给定的数据库,SQLAlchemy支持的任何方言(PostgreSQL,MySQL等)中自动生成SQLAlchemy模型。

安装:

pip install sqlacodegen

运行(来自bash shell):

sqlacodegen --outfile models.py mysql://username:password@hostname/db_name

这是使用SQLAlchemy定义的数据模型引导Django / Flask项目的好方法。我通常使用etlalchemy和sqlacodegen的组合来获取具有预先存在的数据库引导的Django / Flask模型。我使用etlalchemy将数据库表从任何数据库类型复制到我选择的所需本地数据库(即SQL Server - > MySQL),然后使用sqlacodegen自动生成我的模型。

答案 2 :(得分:0)

我通常是DRF的忠实拥护者。实现简单的用例非常简单,但对于更复杂的用途而言却非常强大。

但是,如果您没有将Django模型用于所有数据,我认为JsonResponse可能更容易。运行查询和手动操作(特别是如果它只是一个端点)可能是要走的路。

很抱歉没有考虑到问题的其他部分。