Thinking out loud about questions related to developing in Python on the Django/Google App Engine/Pyjamis platform.
Google’s App Engine is a seductive development platform. For one thing, and this is a common feature of any object oriented database I presume, the Big Table interface the need to develop SQL code that handles storing/retrieving objects. This alone would have me committed to the object oriented databases since it cuts the amount of coding (and the amount to be maintained) in half. I suspect that reporting may require a SQL database but that is a different question. Being able to develop the front end and business objects without coding a SQL layer allows me to think in terms of the objects, and not in terms of the representation in the database.
I installed All Buttons Pressed’s django non-rel project as recommended on irc.freenode.net#appengine. It took some work to get everything to the point where a) I could call manage.py runserver successfully and b) before I got the hang of Django’s url descriptions (which are the same as the appengine samples but are more complex, which threw me off because I wasn’t that familiar with regex).
Ok, now everything is working. Plus I have both the Django administrative console and the appengine admin console.
But having a database and having an application server do not an application make. I need authentication, a permissions management infrastructure, tools for a rich presentation layer, and more. I am starting to figure out how this all fits together. These are the tools I’m looking at right now:
Google Big Table – data store
App Engine – serves up the application and provides authentication via Google Authentication / Users service.
Django – provides the administrative, templating, and other infrastructure services for the application on top of the app engine server and the Google Big Table (or other) data store
Pyjamis – infrastructure to drive the front end
Things I want to understand further:
How do the Django Models and the App Engine Models interact. I like using App Engine Models – they were very clean and fast for putting and getting objects. How does django-nonrel handle interfacing to the App Engine Model object? If I use the Google Models then I’m intimately interconnected to that database. If I use the Django Models I can change the back end driver and support multiple databases. Some things to think about….
What do I give up if I choose to use Google User services vs. Django User services. The two do not match exactly; Django’s User object is more complex and supports permissions, etc. I am not sure if I want to use Django’s permissions or roll my own, which is what I’m looking to determine. If I roll my own, I’ll consider using the Google User services so as to enhance the integration with the rest of the Google world of applications.
Interacting with the Google environment is a key issue for me as I want to use Google Docs, Calendaring, and so forth inside my application if I can extend the objects to meet my needs.
10 Questions to Answer Re: Google App Engine / Django
1) Can I use Django permissioning with Google’s User services?
2) What is the hit for using Django models instead of Google’s models?
3) How does Pyjamis fit with Django? Does it integrate comfortably?
4) Can Google Contact objects be extended to provide the basis for an application’s “case” data, meaning extending a contact to include application specific data in a comfortable way?
5) Can Google Calendar objects be extended to include application specific data in a comfortable way?
6) How committed is Google to supporting Python? Does it matter? The crux of the issue: Is Google going to front-port to Python 3 or will Python fork into Google’s version and Python.org’s version. I would not want to see such a forking occur, and would drop Google if that happened, even though I see Google as the dominant player for the next twenty years, replacing Microsoft.
7) How do I make sure that the services I’m writing are open to automation behind the front end, i.e., available as services to other applications via standard interfaces? I’m talking both about proper layering of the architecture but also about standards based interactions with the front end (Ajax? JSON? What???) Do I get this for “free” using Pyjamis or do I have to work for it?
8) It is SUPER important to me to support both internationalization and people with disabilities. What standards do I need to follow re: both. Django provides support for internationalization. I need to look at that support more closely.
9) How do I debug this application?
10) How do i do unit testing properly with this application.
Right now I’m using Emacs to develop, which is what I always do when I’m learning new systems and languages. Do I want to move to Eclipse? Hey, that is an 11th question.