schemas - Aplicación Django multiusuario
django tenant example (2)
Eche un vistazo a https://github.com/bcarneiro/django-tenant-schemas . Solo tendrá una instancia de proyecto y no tendrá que hacer muchas modificaciones en su código.
¿Hay patrones comunes que las personas usan para crear aplicaciones multiusuario usando Django? El marco de "sitios" incorporado parece una opción. ¿Hay otros enfoques con los que las personas hayan tenido éxito?
El uso del marco de los sitios ayuda en gran medida a proporcionar una garantía de seguridad a los "inquilinos", asumiendo que le da a cada instancia del sitio una tabla única.
Por otro lado, será una gran molestia si tiene un número reducido de inquilinos y desperdiciará una gran cantidad de recursos del servidor, ya que necesitará al menos un proceso de servidor por cliente, incluso si no están usando el sistema. Si tiene un gran número de inquilinos, no será tan complicado porque se verá obligado a automatizar la solución independientemente de su enfoque.
Poner una clave externa de inquilino en casi todos sus modelos funcionará bien y el ORM de Django hace que sea más fácil (más fácil) hacer cumplir la seguridad utilizando administradores personalizados . El inconveniente es el rendimiento si comienza a ser golpeado con muchos usuarios, porque no hay una manera fácil de escalar.
Si necesita escalar, creo que la mejor solución podría ser una combinación de ambos enfoques. Cada modelo tiene una clave foránea para el inquilino, por lo que las bases de datos se pueden compartir, pero luego desarrolla un mecanismo a un nivel más alto que Django para encaminar a los clientes a una instancia del sitio. Esto le permite colocar inquilinos realmente grandes en sus propias bases de datos con recursos debidamente ajustados solo para ellos (por ejemplo, la cantidad adecuada de demonios mod_wsgi, número de conexiones de base de datos, grupo de memcache del tamaño adecuado, etc.) y los inquilinos más pequeños comparten recursos comunes.