It's a tradeoff, and either extreme has problems.
Too much abstraction (especially leaky abstraction the way web frameworks are) makes it difficult to reason about your application.
But if you optimize for absolute minimal abstraction, then you can get stuck with code that's very repetitive where it's hard to pick apart the business logic from all the boilerplate.