Django模型跨多个项目/微服务.如何?

Use*_*ser 8 django microservices

我想知道如何解决多个(分离的)django项目/微服务之间的模型结构共享.例如:

  1. 项目:API
  2. 项目:用户仪表板
  3. 项目:管理仪表板
  4. 项目:统计

每个项目都使用相同的django模型.是否有一种正确的解决方法?

Avi*_*aor 8

Django的基本思想是将整个应用程序功能结合在一起,但这并不适用于您的情况.这是一个风格和意见问题,这是我在类似情况下所做的.

将应用功能拆分为两个项目区域:

mysite
   |
   | - db_access
   |         | --- app1
   |                 | ---- models.py
   |                 | ---- db_api.py
   |         | --- app2
   |                 | ---- models.py
   |                 | ---- db_api.py
   | - service
   |         | --- app1
   |                 | ---- urls.py
   |                 | ---- views.py
   |         | --- app2
   |                 | ---- urls.py
   |                 | ---- views.py
Run Code Online (Sandbox Code Playgroud)

db_access部分具有模型,并db_api.py具有查询,获取对象等,因此您不查询模型,而是查询db_api.

代替

item = app1.models.Items.objects.get(user=request.user)
Run Code Online (Sandbox Code Playgroud)

使用

item = app1.db_api.get_first_item(user=request.user)
Run Code Online (Sandbox Code Playgroud)

这种风格允许您一起共享数据库和模型访问,同时每个服务消耗它所需的内容,然后将其用于API,网站等.如果服务以某种方式消耗某些数据,而其他服务不会(并且不会)使用,然后将此查询放在服务代码中,否则放在db_api.py中.

这更像是传统的应用程序,但它可以工作.

另一件事,同一个项目可以使用两个 git存储库,一个用于db_access(所有服务都拉),一个用于特定服务.所以每个django项目实际上都是db_access repo,当然,如果项目代码来自两个存储库,那么服务repo-wsgi并不在意.


Hai*_*ris 5

两种可能的选择:

选项 1 - 使用通用代码库并部署它的多个实例(每个微服务一个)。您可以遵循 12factor Apps Methodology,只需为每个部署的实例加载一组不同的环境变量。http://12factor.net/

选项 2 - 将您的 django 代码拆分为自包含应用程序,然后为每个微服务创建一个项目,该项目仅包含这些项目和 url 配置。

如果这有帮助,我可以进一步扩展吗?

  • 请对此进行扩展! (3认同)