Django, Java and framework functionality
It seems that every web framework has the desperate need for displaying tabular data, but only few solve it as well as Tapestry does with contrib:Table. Even if you’re stuck with plain JSP there’s the excellent Displaytag library. Django has no such thing at the moment.
Not only that, the more I work with Django the more it reminds me of early Servlet-based development environments. urls.py resembles <url-pattern>s, Middleware can be compared to javax.servlet.Filters. Now, of course, Django is much more fun to develop with, because of its Admin-application, the newforms library, it’s pythonic and it supports rapid-turnaround development. So there’s no XML-juggling involved and you don’t repeat yourself and generally the design revolves around easy to guess interfaces. But really, I’m missing some of the features that are available in a Java software stack.
Currently, if I’m working with Java that means I have:
| Feature | Library |
|---|---|
| Component-oriented development | Tapestry 4.1 |
| Dependency Injection and module discovery | Apache Hivemind and of course Spring |
| Full Ajax support | Tapestry 4.1 |
| Declarative, fine-grained security | Acegi, combined with Tapestry-Acegi (modified for form-based authentication) |
| Database access | JPA / Hibernate |
| RSS/Atom support | Rome |
| Full PDF support | iText |
| Real full-text search | Lucene |
Of all these, Python has only a few equivalents. Rome, for example, is modeled after Mark Pilgrim’s excellent Universal feed parser and Django’s ORM solution works for most cases (I happen to think that EJB3 did a few things right), but there’s no equivalent to iText in terms of functionality and feature support and Acegi/Spring-security is simply the most-advanced authentication/authorization-library there is.
So if Sun would finally stop diluting the standard library and instead get their act together on fast and painless class-reloading, it would be a blast to work with (feature-wise, not language-wise, which might be fixable by using JVM-based scripting languages like Groovy or JRuby). But as long as I have to wait 30 seconds per round-trip for Tomcat to restart, I’d rather shoot myself than attempt to develop a CRUD web-application with Java again. If only someone wrote something like Django’s Admin application for Tapestry and JPA…
For now, it might at least be possible to integrate some of the libraries mentioned above with Python, by using gcj along the lines of PyLucene.
So I guess if I find time, which I don’t have, it’s pretty clear what has to be done. Someone needs to develop an Admin-application for Tapestry based on contrib:Table, BeanForm, JPA and annotations and then someone needs to develop a contrib:Table-lookalike and a fine-grained authentication and authorization middleware for Django based on decorators for views, but with the possibility of an external configuration file (dare I say it: possibly XML-based).



03/28/2007 at 21:06 #
Spring Python many features such as IoC, remoting, database templates, and of course, Acegi-like application security. We have our first release out, and will have another one by mid-April. Check out http://springpython.python-hosting.com/wiki/ApplicationSecurity
To top it off, there is a PetClinic demo application, showing usage of all the features. (http://springpython.python-hosting.com/wiki/PetClinic)