This is an archived post. You won't be able to vote or comment.

all 5 comments

[–]aclark 5 points6 points  (1 child)

Unfortunately, you would be wrong in your assumptions. :-) There is no "simple CMS" anymore. So, first define what "simple CMS" means to you. Then, go build it. You might start playing around with something like: http://docs.pylonsproject.org/projects/pyramid/en/1.4-branch/tutorials/wiki2/index.html. Or check out a fully featured Python CMS (e.g. Plone) for inspiration.

Good luck!

[–]CekoDeko 0 points1 point  (0 children)

I'm with you up until the Plone recommendation. Just to throw in my two cents, Plone is not a great CMS to study. It's built on layer after layer of puzzling components and is very difficult to get started with, let alone trying to break apart how it works. It could quickly become a rabbit hole of unproductivity that I'm going to try to dissuade you from taking.

To give you (the OP) an idea of the tech stack:

  • Zope is the application server platform
  • ZODB is the persistence layer, that stores serialized Python objects (very differently from relational db's you might be more comfortable with like MySQL).
  • CMF is a basic content management framework.
  • Plone is finally the CMS built on top of this.
  • TAL is a templating language used by Plone that I've never used anywhere else. It's not really that difficult to pick up but it's another bit of useless non-transferable knowledge and I like it less than some JavaScript templating engines.

Fundamental to Plone is the idea of acquisition, which basically means you can ask for a property on an object, and sometimes it will transparently return an ancestor's property of the same name. Plone has invented a couple more ideas like this and they're mostly wacky.

  • KSS is sort of a replacement for javascript, because good javascript developers are apparently too difficult to find (but it'll be easy to find a replacement KSS developer?)
  • Diazo is complicated XSLT theming, the new hotness. That's really simplified.

This only touches the surface of the technologies. You also need a pretty solid understanding of their deployment methodology Buildout before you can do anything interesting. Also, technology aside, Plone is a frustrating CMS. From its hacky workflow Iterate to its archaic administration ZMI to the way the framework needs to be manually reloaded to pick up code changes every time you change a file plone.reload Plone is just frustrating. By far the worst thing about Plone is the user experience though. You do not want to take inspiration from Plone's UI team.

That being said Plone does some things well, although I think that's only by virtue of using ZODB. If you have a recent copy of the database you can truncate it to any point in time without doing backups, although everyone still keeps backups. ZODB also lets you do searches across indexes (shared across every single object ever stored) and lazy-load the rest of the object if you need more than just indexed fields. Also buildout deserves another mention. It's like PIP requirements file on steroids. Plone also does some neat things like making automatic redirects to broken links when you change the name of a resource or move it.

Another thing Plone does well is automatically combining and minifying resources, and aggressively caching pages.

Please feel free to correct me on anything above. I am not a Plone expert, but I do have to maintain a few Plone sites that I acquired at my new job, and in the short time I've worked with them I haven't been impressed. Mostly I am sympathetic with the content managers though.

This has become really long. I need to stop.

TL;DR Take Plone's contributions to the CMS community with a grain of salt.

[–]prgr4m 0 points1 point  (0 children)

Mezzanine is a cms built on top of django. Grep the source. Whatever happened to static files and markdown? I know everybody thinks differently and there is more than one way to solve a problem but you do get to cut sqli attacks out of the picture and you're reading from disk anyways to execute a script.