Creating My Own Blogging Engine Part 1

I was starting to feel a bit stressed because my job no longer has me doing development work. I love the work I'm doing. Video editing and helping out with video production and management is a great creative challenge, but I'm still a programmer at heart and need to write code occasionally.

So I decided to ditch my old Wordpress blog, and start a new one that will service me on my 10 Year Plan.

Blog Features

The new blogging engine should have the following features:

  • Blog posts with draft status, and ability to view drafts on site as admin.
  • Scheduled publishing of posts.
  • Markdown post content.
  • SEO friendly url's.
  • Auto create slug.
  • Meta data for posts.
  • Categories and ability to add/manage categories.
  • Sharing on Social Media (Add this).
  • Disqus comment integration.
  • Twitter Bootstrap for clean responsive design.
  • Site search engine.
  • Google Analytics.

That covers the basics, and then some.

Architecture

For development, I decided (logically, I think) to setup a vm using the same version of Ubuntu that I have on my Linode server. Parallels on the Mac is my vm weapon of choice, and I've been pleased with how easy the experience has been.

I know I could have just as easily done the development and testing on my Mac, but troubleshooting has been much easier when I don't have to wonder, 'is this because I'm running the code on a Mac, vs. Linux?'

Software

  • Python: Specifically using Python 3. I've done a lot of development over the years in perl, PHP, C, Objective-C...you name it, and I really like Python. It's easy on the eyes, pleasant to type, and quite clever at times.
  • Django: The site is built using Django, "The web framework for perfectionists with deadlines." I have played with Django a bit in the past, but still a bit new to the framework. I like that it is python.
  • Virtualenv: Allows easy setup and management of virtual programming environments.
  • Virtualenvwrapper: The wrapper adds some very handy commands, and makes working with virtual environments a breeze.

Getting Started

A Django project is a collection of applications, or apps. Since my long-term plan is to have multiple features to the site, I created a TenYearPlan project, and a blog app.

$ django-admin startproject tenyearplan
$ python manage.py startapp blog

If you are new to Django, work through the terrific tutorial. This is not intended to be an introduction to Django, but a discussion of my adventures creating a blog and other applications.

We now have a functioning project and application skeleton. Time to setup the model. But let's take a break for now. I'll continue with the model layout and database setup in the next part.