I have heard it said that Django reusable apps are not. On some level, I agree with this. On another, I disagree. Reusable apps need can be reusable if done right.
The biggest thing that make a non-reusable app is bad documentation. If documentation doesn’t say how to integrate the app, it is not reusable. There are several important things to document with reusable apps.
- Are any settings needed in settings.py?
- Are there any signals raised by the app? How are they used?
- Does the app catch any signals?
- Does the app include middleware that needs to activated?
- If middleware is needed, how does it fit in the middleware order?
- Does it define its own URLs, views, models, and templates?
- If I have to define any of these, what is needed to make them work?
- Does the app provide any management commands?
Templates are a big concern when I look at reusable apps. Many times provided templates don’t fit into my site, and I have to rewrite them. When I do this, I want to know what template tags are available. I want to know what context variables are set in the template. If there is a form, I want to know about the fields. I want to know which fields are required and how they are validated. If I have to process the form in my view, I want to know what needs to be done.
Ok, I thought I had more to say, but I guess that is all I can think of. I wanted to write more about if the app tries to do more than a single thing or if the app has dependencies on a lot of other apps that conflict with other apps that I already have, like using a different migration app than I am. But I can’t think of worthwhile arguments for these issues. Just trust me that it matters.
In the end, a well documented app makes it more reusable. Just like any other piece of software.