Wednesday, April 22, 2009

Sweet spots of Plone

Yes, I am posting this with Django and Pinax tags because I think my Django and Pinax friends can learn from the lessons of Plone.

I'm admittedly more interested in doing Django these days yet I keep myself firmly aware of the things for which I think Plone (and its components and relatives) is unsurpassed in the Python framework world. Arguing these things to Djangonauts is interesting, because so many times they just reject things out of hand (just like certain Zope zealots I know). And I think that is to their loss. When you hit Plone's sweet spot, things get interesting.

I've ranted about this before. In essence Plone follows a subset of the Dublin core. Any database object in Plone has certain fields you can rely on in searches, views, and business logic. You don't have to introspect the objects to find these stock fields. Until I went back to entirely developer defined models with Django, I forgot just how much I had taken this for granted.

Years ago some madman integrated DCWorkFlow into Plone. You can build custom workflows either in script or via the UI. The scripts and interface to use it has been unpleasant until recently, but then name a workflow engine capable of handling complicated workflows that is fun/easy to use? Thanks to Martin Aspelli his product called, Plone workflow management has become much, much easier. As far as I know, nothing in Django (or TurboGears or Rails) compares except maybe GoFlow, and I don't speak French.

Object Oriented Database
I like the Django ORM. I like SqlAlchemy. Until I run into the edges of the fact that they are modeling table records as objects. Object Relational Impedance Mismatch anyone? Ouch the pain! I do recognize that relational databases are very useful and powerful, but sometimes I wish things were different. One day, when I'm indepedantly wealthy and own my own private tropical island I plan to get the Django ORM running with the ZODB.

Groups and Users permissions in Plone are implemented really well. Object oriented databases handle hierarchies and references very well, so the whole parent-child ownership thing is done easily. This is critical in CMS work - ownership and control. Other frameworks have this built-in, but it is not automatically attached to each content object that you create. You get very used to it being magically done for you in Plone.


tunix said...

in my eyes this post is entirely pointless. Plone is not in need of advertisment. I supscribe to the django community feed to read about django, not plone! This post has absolutely no django relation. Sorry but this is just annoying as spam!

pydanny said...

@tunix, Ever hear the phrase, "Those who do not understand their history are doomed to repeat it."

Or watch Mark Ramm's presention of what Django can learn from Zope?

If you don't like it, block my blog.

tunix said...

You missed my point. I think there is a lot to learn from plone, zope or any other project with a lot of experience. Mark Ramms presentation is very informative. Your post reads more like a advertisment. I don't have any problem with it; you are free to post whatever you like. But with a django tag attached its just additional noise on the django community aggregator and I cant find the django relation in it.

pydanny said...

@tunix, point taken. Next time I will write things differently.

Anonymous said...

It's always good to hear about other projects and how they compare with django.

Came here from a link on the django aggregator and found this article informative. Thanks for reminding me that in the bowls of hell that is known as Plone--even there can we find ideas to consider. ;-)

Anonymous said...

I don't think the post reads like an advertisement. And its intent, and relation to Django, is clearly stated early on. If you don't like it, ignore it and read something else. Just because you aren't interested does not mean others feel likewise.

pliske said...

I found this interesting, and very much relevant to Django.

About a year ago, i came across Django via Plone. I was a frustrated Drupal user, was researching other content management systems and came across Plone. I played around with Plone, found it interesting, but not quite what I needed at the time. But this got me interested in Python and other Phython frameworks, which brought me to Django, which I have used heavily ever since.

I'd be very interested to learn more about integration points between Plone/Django; and contrasting two things is a great way to learn about both. And thank you Plone for the introduction to Django.

Anonymous said...

The UI design has always been a huge turn-off for me w/ Plone. Not saying it's not well-written software, just that it looks like it was designed in 1997.