I know about Django, but what other frameworks exist to make it straightforward to process Web requests with Python? Anything non-MVC, just for the sake of argument?
import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
class hello:
def GET(self, name):
if not name:
name = 'world'
return 'Hello, ' + name + '!'
if __name__ == "__main__":
app.run()
It's great for writing small one-offs (the sort of thing you might use PHP for) and web interfaces for non-web applications. But for large projects it's really not suitable.
So here (http://fewagainstmany.com/blog/python-micro-frameworks-are-a...) is a post that lists some micro-frameworks for Python, such as web.py. Many of them are similar to Sinatra for Ruby (if you are familiar with that framework) and basically allow you to create very simple web applications in a single file if that is what you desire. While these are not inherently MVC, they can be used as the underlying foundation for your very own MVC framework.
As for MVC, the other big ones for Python (other than Django) are Pylons and TurboGears. Of course there are some other very heavy weight ones as well, such as Zope and Plone, but my knowledge of these is very limited, so I'll leave them for someone else to comment on.
Finally, you can could always use the WSGI spec directly and just slap together all the other "best of bread" pieces to make your own simple framework. It's actually pretty easy to do so, and the best tutorial I've found on doing just that is on Joe Gregorio's website (http://bitworking.org/news/Why_so_many_Python_web_frameworks). Check it out, it's definitely worth running through once to at least get an idea of what other frameworks are doing under the hood.
The reason that there are so many frameworks is that writing one used to be a rite of passage for Python programmers. It was so easy to write your own.
FWIW Guido settled on Django. I dont know if he has changed his mind since.
I started diving into Django a few months ago for a side project, and haven't looked back. I know a ton of Django programmers in the area, and there's a great community for Django devs online.
Nagare (http://www.nagare.org) is really different.
Not yet-another-MVC-framework clone but based on a true components architecture and using continuation, like the Seaside framework, to free the developers of the Web constraints.
Nobody uses zope? really? Plone, arguably the best Open Source CMS out there is built on Zope2 and continues to be used in ever increasing numbers..
Zope3 is not just a "framework". Its a mindset that allows people to think about solving problems in a robust way, which will remain useful for software's lifecycle.
Zope people realized the danger in building monolithic frameworks after the experiences of Zope2. When they started zope3, they kept the goal of reusability the number one design goal, even at the risk of appearing over-engineered at times. Today, there is no Zope3 and Zope3 is everywhere. Zope lives in Plone, Repoze, Grok and myriad of python libraries.
Lot of good ideas from zope like Zope.Interfaces and Zope component architecture are being outside the zope community.
Django is the Zope2 of 2009.
How many software stacks are still being supported and catered for after 10 years? Zope is a greybeard but saying that nobody uses it implies lack of actual knowledge of python frameworks and how they play together.
zope is no longer a monolithic framework, but a large collection of libraries, most of which can used outside the main zope framework or even create your own framework. You can use what you want -- the `pay for what you eat` principle.
Repoze - http://repoze.org and
Grok - http://grok.zope.org are some of the derivative frameworks that use best of zope libraries without going the whole hog.
Today, zope (specifically zope3) is arguably ahead of other popular frameworks in terms of its reusability, deployment stories, extensive testing.
Combine WSGI + Paste + Zope Component architecture + SQLAlchemy and a choice of other libraries to create a robust framework of your own.