Here's some notes from the web framework panel at Pycon, discussing various attributes of the frameworks and why python tends to have so many frameworks.
Discussion led by Titus Brown featuring:
- Zope - Jim Fulton
- CherryPy - Robert Brewer
- Django - Adrian Holovarty
- TurboGears - Kevin Dangoor
- Pylons - Ben Bangert
- Nevow - Duncan McGregor
- Spyce - Jonathon Ellis
- Pyjamas - James Tauber
Why are there so many web frameworks?
JF: Leading framework when Zope started was CGI. Zope started out as an application
Duncan: Nothing worked with twisted.
Robert Brewer: CherryPy scratches a smaller itch. Be small enough for devs to keep in head, but also to allow end users to scratch their own itch. Tries to only be http, not tempating or db.
Kevin Dangoor: Started a one man company (end 2004). Wanted to write as little code as possible. Every part of ROR was already in python, just not integrated. Messed around with different components and settled on his stack.
BB: Pylons started before django and tg were available. Didn't want to maintain anything. Re-use was a key factor. Used Zope and Plone previously.
Adrian: Django extracted from a real world site. Needed to be web apps really quickly. Turned into conventions, into framework into open sourcing.
James Tauber: (Pyjamas) Was using/creating(?) a framework (leonardo) but spent too much time, so switched to django.
Jonathon Ellis: Only real thing available at the time was Zope, which scared him. Got hired using Spyce, and then started maintaining it. When you control the whole stack (via django) you can innovate faster.
If spyce (your framework) died would you re-create it?
JE: I didn't start a framework, I revived one. I like what django does with innovation. But their ORM is feeble.
DM: Perception that the multitude is a weakness. Should turn it on it's head. A sign of intelligence. .... But I'd shoot myself if nevow wasn't around.
RB: Go ahead and build your framework if you want to.
JT: Re-inventing the wheel is great if your goal is to learn more about wheels.
DM: For Content Management I'd use Zope or Django
KD: Pylons is pretty cool
BB: I like TG
KD: More innovation where the individual pieces have thier own dictators. Pushing to break TG code into smaller projects with their own leaders, which will lead to more innovation.
RB: Make a cherrypy session module that works well.
Tightly integrated vs loosely coupled?
Titus: Django claims to be tightly integrated but loosely coupled. What does that mean in english? (Please use wsgi in your answer)
Adrian: You can't have it both ways. Try to make the django site very approachable (even for people who don't know python). Huge turn off to say, "You can do it this way, ps you can also do it these 3 other ways". Need to pick your focus. Where we've failed is that we haven't done the advanced tutorials (for people who want to use some different components) (Full stack is good for beginners)
Jim Fulton: You have to have documentation. Stories for people getting started and stories for solving them. Peeve, understand the appropriate use for technologies. Zope isn't a replacement for simple CGI. Need to be clear about goals and document how to solve those goals.
Titus: Pylons says on the front page "Here are the choices you need to make"
BB: Probably need to change the front page. Have a default suggested component. Have something that's easy to use, but powerful enough that if won't hold you done later.
Python virtue: One way to do it? Web frameworks are perlish
RB: These frameworks are domain specific. Different domains have different solutions
JT: For pyjamas, TG or cherrypy would probably be a good fit (even though I use django)
Titus: Is the web about Pages with ajax?
JE: Are two types of web pages flex/openlazlo vs page based.
JF: Plone is using KSS. Zope corp uses Mochikit. It isn't clear what the relationship between server techs and js should be.
DM: We were there first. We had AJAX before it was called AJAX.
Titus: Is that documented?
BB: Ported rails helper functionality to python. Which generates some js using scriptaculous.