business logic in Django
If the functionality fits well as a method of some model instance, put it there. After all, models are just classes.
Otherwise, just write a Python module (some .py file) and put the code there, just like in any other Python library.
Don't put it in the views. Views should be the only part of your code that is aware of HTTP, and they should stay as small as possible.
I'd like to know where to put code that doesn't belong to a view, I mean, the logic.
I've been reading a few similar posts, but couldn't arrive to a conclusion.  
What I could understand is:

A View is like a controller, and lot of logic should not put in the controller.
Models should not have a lot of logic either.

So where is all the logic based stuff supposed to be? 
I'm coming from Groovy/Grails and for example if we need to access the DB or if we have a complex logic, we use services, and then those services are injected into the controllers.
Is it a good practice to have .py files containing things other than Views and Models in Django?  
PS: I've read that some people use a services.py, but then other people say this is a bad practice, so I'm a little confused...