business logic in Django
I don't know why you say

we can't put a lot of logic in the controller, and we cannot have the models with a lot of logic either

You can certainly put logic in either of those places. It depends to a great extent what that logic is: if it's specifically related to a single model class, it should go in the model. If however it's more related to a specific page, it can go in a view.
Alternatively, if it's more general logic that's used in multiple views, you could put it in a separate utility module. Or, you could use class-based views with a superclass that defines the logic, and subclasses which inherit from it.
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...