This post was published more than a few years ago (on 2013-12-15) and may contain inaccurate technical information, outmoded thoughts, or cringe takes. Proceed at your own risk.

I've been trying to decide how to best go about building a site for a personal project I've been working on for a while. I've tried building it with a wiki back-end -- and used DokuWiki, which is the least annoying wiki software I've had the pleasure of using. However, I've come to the conclusion that to have what I want -- a cross referenced index of magazine issues, podcast episodes, people, companies, and ideas -- that I need to look elsewhere for a long-term solution. A wiki is easy to install, but hard to upkeep, as every time a new relationship is added, I have to update several wiki pages to keep the information in sync.

No, for these relationships, I need a relational database.


I briefly considered trying to bend WordPress, Movable Type, or ProcessWire to my will, but none of them seemed amenable to the sort of relationships that I need for the site. ProcessWire came closest, and I even started to build it with PW, but the element that finally killed that effort was needing page numbers for the magazine issues. I simply could not figure out a solution to referencing page numbers that wasn't an egregious hack that would be difficult to manage. And if I had to write my own plug-in to get it to work the way I wanted, I'd rather work with a programming language I know and enjoy. (Before you yell at me about dissing PHP, I will freely admit that it's likely a matter of unfamiliarity on my part.)

That leaves me with Objective-C, Ruby, and Python. While the Objective-Cloud beta is intriguing, I would have to write the entire site from scratch. Probably better to take advantage of a framework that's made to deal with these sort of relationships off the bat, and has some nice web templating built in -- I'd rather get this up and running before the new year. The main contenders come down to Rails vs. Django (though I admit Flask looks interesting). I could have gone either way, but Rails seems a tad heavy for this project, and Django's built-in web admin panel makes things even easier. Besides, I'm starting to use more Python at the office for workflow scripting, so I'll get in some extra Python practice.

So, I've decided to learn Django for building the back-end of the site. I had attempted to learn Django before, but got sidetracked with other projects. However, this time around, I'm delighted to have found some even better tutorials and resources. Here are a few:


  • Learn Python the Hard Way -- I really like this book's approach. Even though it's a very strict, almost martial-arts way of teaching -- "Do this exactly and don't ask why right now; It will become clear later" -- it gives you a very good grounding in the language relatively quickly.
  • Learn Python in 10 minutes -- If you already know another scripting or programming language, this is a pretty good overview of the basics.
  • Codeacademy's Python Lessons -- A really very nice interactive lesson plan, where you can write Python right in the browser window while it teaches you.