There's a lot of detail at the low level that you miss by using any layers of abstraction (on both Python and Java platforms). That detail is important for getting maximum performance out of your application and correctly dealing with AppEngine's unique transaction model.
The choice of web frameworks is tougher. Startup time is important right now for AppEngine (although slightly less important with some of the new features rolling down). You'll want to use the lightest-weight framework you can find.
On Python, I've had great luck with webapp + Django templates + raw Datastore APIs.
On Java, Guice + Guice servlets + raw Datastore API is really lightweight and fast. We've also developed our own Django-like templating system for Java that we hope to open-source at some point.
Anyone else with more GAE/Python experience want to chime in?
Any chance you could list viable alternatives, please? (I'm considering GAE/Java). Thanks for this interesting thread.
I like it barenaked and closer to the metal.
For a dir structure, I have admin, css, js, prog and view. Not hard to know what goes in every folder. Right now I have like fifty progs and fifty views, each for every specific task.
For every program there is usually one line to get the data from models and one line to render it using a template. Nothing else.
I really don't get what a framework would do to help me, I already have everything I need at my fingertips.
import app
class main(app.request):
app.session.start()
data=app.models.getContacts()
app.render('index',data)
app.run('/',main)
And here the html in the template: <html>
<body>
<h1>Contacts List</h1>
{% for item in data %}
<li>{{item.name}} - {{item.phone}}</li>
{% endfor %}
</body>
</html>
Some purists will burn me at the stake, but it works wonders for me.Using a minimalist framework is a pretty good match for app engine since other frameworks might assume something about the environment that won't be true of GAE.
And you can always mix in other ala cart libraries. For instance, we use wtforms. That combined with a tornado UI module to render the forms nicely has been a effective.
If I were to choose again, I might just use the built in web.py since they often include utility handlers for things like parsing multipart uploads; we've had to reimplement those for our tornado BaseHandler. Then I might use mustache for templating since we have started using that on the client side.
Kind of random thoughts I guess, hopefully somewhat illuminating nonetheless :)