Truth be told, Django's current implementation of plugable apps is absolutely it's worst selling point. Apps in Django are not that easy to install, and sometimes can really interfere with existing functionality. It's sometimes very difficult to make multiple apps play together nicely. This article is not about an existing solution, but rather something I would come to expect in Django 2.0 release, as a major change to the framework.
Currently the method of using an existing app in Django, such as a new Authentication backend, or a debugging app like django-debug-toolbar requires heavily modifying your project's settings.py. In the end, the so-called plugable app is mingled with your project, and is hardly plugable. If you need to remove the app in the future, you don't just remove a single directory, you need to also remove many settings from your project's settings.py, and sometimes the urls.py file. This can amount for a lot of work, and remembering how each app is installed, and which settings each app uses. This can cause your project to break, and tables left in your database from an app which is no longer installed. This is the only part of Django which I frown upon the most. When working with Web2py, I admired the dedication done in app separation. However, I found that the apps in web2py were a little too separate, where it was hard to share data with different apps.
This is what I would like to see done in a future Django release to enable real plugable app support. Each app will contain their own settings.py, which when the app is added to the INSTALLED_APPS tuple, will load these settings into the main settings namespace. It will not append it as-is, however. For example, if the app-specific settings.py has set a MIDDLEWARE, it will apply the new middleware to the existing set of middleware using a dependency system. Anyone who uses Django should know that the placement of each middleware is special, and this is why some sort of dependency system will need to be implemented to cater to this. The other settings will simply be appended as needed to the existing settings. Thus, the placement of each app in the INSTALLED_APPS will matter.
This will enable true app separation and plugable app support in Django. It would also be rather nice if settings for apps could be changed via the admin interface. The settings which do not require some sort of Python code to generate that is. This could enable a better end-user experience, as some apps could definitely benefit from this type of configuration.
Let me know what you think of this idea in the comments below, and what you think of Django's current plugable app implementation.

