Use*_*ser 8 django microservices
我想知道如何解决多个(分离的)django项目/微服务之间的模型结构共享.例如:
每个项目都使用相同的django模型.是否有一种正确的解决方法?
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并不在意.
两种可能的选择:
选项 1 - 使用通用代码库并部署它的多个实例(每个微服务一个)。您可以遵循 12factor Apps Methodology,只需为每个部署的实例加载一组不同的环境变量。http://12factor.net/
选项 2 - 将您的 django 代码拆分为自包含应用程序,然后为每个微服务创建一个项目,该项目仅包含这些项目和 url 配置。
如果这有帮助,我可以进一步扩展吗?
归档时间: |
|
查看次数: |
3750 次 |
最近记录: |