Sometimes I get asked about my preferred development stack. Here is the answer:
Python: I am not a language geek, and need something that works, is powerful, and easy to type and read.
Flask: Compared to web frameworks its rather small, but with good enough and up-to-date documentation. Its popular, but not too modern. Compared to fastapi it is a bit more flexible.
HTMX: htmx focuses on server interaction. For client
interaction one could add hyperscript from the same author or alpine.js
This is exactly how much JS I want to write: none. It
integrates the same way as Chameleon with HTML. This makes it really
easy to understand what is going on. And I like rendering stuff on the
server.
Chameleon: instead of the standard template language I use this one for web dev. I used Zope and Plone for far too long to not love this system. It integrates nicely with HTML/XML.
UIKit:
I am not really familiar with all the CSS tools and
frameworks, but I heard that tailwindcss is a good alternative.
again, I don't really want to touch CSS (and you don't
want me to either). This allows me to create nice looking pages without
too much fiddling with details.
For persistence, it really depends on the project. What I definitely require is transactions though.
- Neo4j as a native graph database. I have a love-hate relationship with it.
- memgraph is an alternative native graph database. It can do python on the server side. Hurray!
- ZODB is a fantastic generic object database for/in python. Its schema free.
- MariaDB or SQLite if there is need for relational databases. I guess I need to switch over to Postgres.
- git, of course
The stack visualized
Also, it's all Open Source. As a consultant I could not recommend professional clients otherwise. The two main reasons are tie-in and security.
Not really part of the web stack, but my everday, all day work environment: PyCharm. Because of java it tends to have slight font rendering issues in scaled environments, but other then that it is a must for me.
Why those?
I have been for a long time in web development, and one of the best experiences was with the Zope Application Server. What did I like there?
- Python: it is so easy to read, no brackets, and writing it is a joy (most of the time)
- Object database: this allows for a really flexible development, where the implementation can follow the ideas and not the other way around
- ZPT: A page templating systems where even the source is valid XML, the code is where the action happens, and powerful features (macros, slots, i18n)
- Server based: I don't like to have to write my code on the client. First, javascript. Second out of security reasons - in the end I need to validate everything on the server anyhow.
- Transactions: I honestly don't see how one can develop without proper transaction suppert. Before that I messed up my databases at times. Use transactions, and any problem in the code will rollback any writes to the database.
Now Zope has probably seen its best days, and as soon as you leave the through the web development and start to look under the hood, you are up for a ride down the rabbit hole. Also, Zope likes to arrange objects in Trees, which is good for security, but is still akward when working on graphs.
So, the above are newer components that help a lot with my use cases. And I especially want to hightlight the combination of Chameleon, UIKit and HTMX: all of those allow to change behaviour by working on tags, this means that most/all of the "action" happens in the same place. After a while you really start to feel the coherence. It's easier to debug, and more fun to develop.