After 6 months using Django, I’m still not entirely comfortable with it’s separation between applications and projects. Apart from how to name the first application (“main”? “web”? “site”?), I frequently find myself wondering whether a particular piece of functionality does not warrant it’s own application.
So far, my rule of thumb has always been “only if it’s reusable in other projects” – basically, stuff like a forum, blog or wiki. As I’m about to start writing an API for critify, the issue comes up again. Create an “api” app? According to the above, the answer would be no, but I am hesitating. It would make sense, in a way. New models will be necessary. Doesn’t an api_keys table seem more “right” then one called site_apikeys?
Maybe a better rule would be: “if it needs it’s own models”.