I'm wondering how to solve sharing of the model structure between multiple (separated) django projects/microservices. Eg:
Each of that projects uses the same django models. Is there a one, proper way to solve that?
Django basic idea is to couple the entire app functionality together, but this does not hold in your case. It's a style and opinion question, here is what I did in a similar situation.
Split the app functionality into two project lairs:
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
The db_access part has the models, and db_api.py
has the queries, get objects etc, so you don't query the models, but the db_api.
Instead of
item = app1.models.Items.objects.get(user=request.user)
Use
item = app1.db_api.get_first_item(user=request.user)
This style lets you share the db & models access together, while each service consumes what it needs, and then use it for API, website etc. If a service consumes some data in a way that other services don't (and will not) use, then put this query in the service code, otherwise in the db_api.py.
This is more like a traditional laired application, but it works.
Another thing, the same project can use two git repositories, one for the db_access (which all services pull), and one for the specific service. So each django project is actually the db_access repo, and the service repo - wsgi doesn't care, of course, if the project code comes from two repositories.
Two potential options:
Option 1 - Use a common codebase and deploy multiple instances of it (one for each microservice). You could follow 12factor Apps Methodology and just load a different set of environment variables for each deployed instance. http://12factor.net/
Option 2 - Split your django code up into self contained applications then have a project for each microservice that just includes these projects and a url config.
I can expand further if this is helpful?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With