I am trying to decide how to implement this architecture. I have a base Django package, let's call it BaseApp. I have been developing this for distribution as a tool for others to use. BaseApp defines some view behavior and some base models, mostly. A developer can install BaseApp, and then make another app, let's call it NeatThing, that only has to define a few models and templates, and BaseApp does the rest, and for very little effort they now have a mini-application that Does Their Neat Thing. Repeat x 100, and we have 100 different developers doing 100 different Neat Things. And they all work just peachy as separate servers in separate environments, etc.
Now I want to take that and provide 1 version of BaseApp, and 1 database of users, and all 100 different Neato-Whiz-Bang applications, and serve them together on one domain, so users all come to the same place.
How do I do that so that:
- 1 URL points to one of the 100 different applications (programmatically in a way I configure)
- ensure the 100 different applications are isolated from each other (can't interact with each other at all)
- give each application (limited) access to the User database so that users can be associated with the models in their application (I am aware of Django multi-database support - but how can I secure one user database while giving each application access?)
I am asking this as a high-level implementation approach standpoint. I.e. which direction do I go from here?