From my experience, if you have a very small team, some of the "freebies" that come with django can be pretty useful.
If you have a larger team, you can probably many of the freebies on your own.
I'd also say use django-nonrel if using the HRD. Many of the useful "freebies" you get with django will use the ORM to talk to the database/datastore. The ORM doesn't work with "pure" django.
If you're using CloudSQL, django is all the more appealing.
Here's an example of what I mean by freebies with Django:
- You can launch a basic commandline shell using "python manage.py shell", where you'll have full access to your datastore etc. Not too difficult to get set up on your own though.
- Django comes with testing tools that are really useful:
- You can use "python manage.py dumpdata" to dump your entities to a json file
- You can use "python manage.py loaddata" to load your entities from json back into your datastore
- You can use the json file generated by dumpdata as a fixture for testing
- Django comes with a nice test harness that supports fixtures. If you're not using django, there's other test frameworks like nose-gae that you'll have to set up yourself. I'm not sure if creating fixtures are as easy as using dumpdata though.
- I used django-social-auth to get user accounts that support facebook and twitter in under an hour.
- I used django-tastypie to get an easy to use REST API in very little time as well.
- Django has a pretty robust caching framework for *rendered* templates. You don't have to worry about caching a page that doesn't change often.
But don't expect the Django admin to work - it's a bit of a pain to get that working with django-nonrel, since many-to-many relations aren't natively supported well.
Some of the reasons you might want to go with webapp2:
- Much more of the GAE python community is on webapp2. They're working on little pieces here and there, and projects like gae-boilerplate get you fairly close to the things django-nonrel provides.
- While you save a lot of time coding, you may spend a lot of time hacking django when it doesn't do things exactly the way you want.
- You can't use ndb
- Some pre-built stuff, like tastypie, may not be as efficient as if you built it yourself (I'm finding tastypie makes some unnecessary queries).