In the other hand, having less features have help me in re-factor not just the code but how I do the whole thing, making more focused choices to be able to solve problems with less complexity.
Eventually the design you get (partially because the lack of support for things on Rust) is much better overall.
To make things more concrete: I use nearly 0 JS and no "single page apps", use tailwind and have reduced, a lot!, CSS designs issues, have more control in how mutate things, have less API surface, make better use of what PostgreSQL have, etc.
https://github.com/secretkeysio/jelly-actix-web-starter
I built it because I was _also_ frustrated with the same level of abstraction you mention. Granted, I do agree that that Django/etc are more feature-rich, and that's definitely not getting replaced overnight.
Java/Go will deliver similar perf for most web apps, and have more mature tooling, python will be better for ML, C++ for systems programming, JS/electron will be better for the frontend and java/scala for distributed processing.
Rust has the innards to do all of these things at the same time with one shared code base (albeit somewhat poorly today). It's the only one of the above languages that hasn't made some decision which makes a use case impossible such as running on a VM, no function serialization, no direct hardware bindings etc.
Please feel free to subscribe to the newsletter where I will announce when it's available :) https://kerkour.com/subscribe
I'm working on it 2 days a week beside writing the book.
The next major milestone is receiving emails in the inbox, but I think it will take 2-4 months to have it working.
https://crates.io/crates/dropshot
It may or may not interest you!
I'd say the most powerful part of FastAPI is that it integrates everything in a relatively opinionated way, that you would spend a lot of time setting up Flask plugins/extensions for to get an equivalent feature set.
I'm not sure I'd say it's based on OpenAPI(?), but it does automatically generate OpenAPI based docs from your Python code. There's no intermediate step, the '.../docs' route just exists at runtime.