Create your own online store in few hours using satchmo (django)

What is satcmo?

Satchmo is a django based framework which allows you to create an online store very quickly. Satchmo also offers powerful customizations which allows you to tune a store to your specific business needs.

Sample Demo Store :

Login details

  1. Use below mail and password to login into the site:
    Email : [email protected] password : welcome
  2. Use dummy credit card number like 4222-2222-2222-2222 (VISA) to make any purchases.

Above is the sample demo store which is being provided by satchmo outofbox just after installing it.

In this blog post we will discuss very basic things about satchmo like how to install satchmo? , and how to do various customizations ? etc……

Installing satchmo

Please note below

  1. Installation instructions are applicable to the latest version of satchmo which is available in the trunk.
  2. We assume that python setuptools has already been installed on your system.
  3. You must have latest version of Django 1.1 beta.

Just follow the below 5 steps to install various dependencies of satchmo.

1) easy_install pycrypto
2) easy_install
3) easy_install django-registration
4) easy_install
5) easy_install PyYAML

install django-threaded-multihost

Go to : Download latest .tar.gz file and follow below steps

8  tar xvzf django-threaded-multihost-1.3-0.tar.gz
9) cd django-threaded-multihost-1.3-0
10) python install

if you get any error as below

Traceback (most recent call last):
File "", line 1, in <module>
import ez_setup
ImportError: No module named ez_setup

Fix the above error

Open and comment out the first two lines as shown below and repeat the step 10.

# ez_setup.use_setuptools()
# from setuptools import setup, find_packages

Next install django-app-plugins app by following below steps.

11) svn checkout django-app-plugins-read-only
12) cd /path/to/your/site-packages/dir (usually it is /usr/lib/python2.X/site-packages/)
13) ln -s /path/to/django-app-plugins-read-only/app_plugins  .

12) Installing an app means placing an app on python path so that django can find it

How do we do it?

13) By convention any directory which is in /usr/lib/python2.X/site-packages/ is on python path.Because of this we are creating a symlink from the sitepackges directory to the directory where we checkedout the latest version of django-app-plugins.Symlinking is more efficient that copying entire directory under sitepackages.

Install Sorl thumbnail app for generating thumbnails from images

14) svn checkout
15) cd /path/to/your/site-packages/dir
16) ln -s /path/to/sorl  .

14,15,16 We followed similar approach as that of above to install sorl-thumbnail application.

Optional dependencies

17) easy_install elementtree
18) easy_install docutils

The above are all dependencies which are required for the satchmo.

Now we will see how to create our own custom store using satchmo

create new django project

19) startproject customstore

check out the latest version of satchmo

20)  svn co svn:// satchmo-trunk

Install satchmo

21) cd satchmo-trunk
21) sudo python install

Make sure everything is working fine.

>>> import django
>>> django.VERSION
(1, 1, 0, 'alpha', 1)
>>> import satchmo_store
>>> satchmo_store.VERSION
(0, 9, 'pre')

Go to your project

cd customstore

copy and from the sample project which is provided along with satchmo.

cp  ......../satchmo-trunk/satchmo/projects/base/  ........../customstore/
cp  ......../satchmo-trunk/satchmo/projects/base/  ........../customstore/

Edit customstore/

  1. Change the Django_project name from ‘satchmo’ to ‘satchmo_store’.In previous versions project is called as “satchmo” but now it being called as “satchmo_store”

  2. In installed apps if you find an app called “satchmo” rename it to “satchmo_store” .

Edit customstore/

1.Uncomment DATEBASE_NAME,DATABASE_PASSWORD,DATABASE_USER and add corresponding details of your database

DATABASE_NAME = 'satchmostore' #Name of the database which you create.Please refer to an additional note for mysql users at the end
DATABASE_USER = 'operations'

The characters which are being transferred from database server to client should be in UTF-8.if your database is MYSQL you need to add the following in

DATABASE_OPTIONS = { "init_command": 'SET NAMES "utf8"' ,  "init_command":'SET storage_engine=INNODB' , }

The above command also sets INNODB as storage engine for database tables. we need to use INNODB instead of ISAM to support transactions. Uncomment SECRET_KEY and provide some value

SECRET_KEY = 'asdf'

if you are using MYSQL please note that you need to create database in UTF-8 character set as follows

 create database satchmostore  CHARACTER SET UTF-8


Copy paste the below code in the

from django.conf.urls.defaults import *
from django.conf.urls.defaults import *
from satchmo_store.urls import urlpatterns

if you have any other addtional urls you need to add at the end of as

urlpatterns += patterns('',.......)

Copy over the static content

22) python satchmo_copy_static

Check whether there are any errors in the configuration using.if there are any errors you need to resolve them before proceeding further.

23) python satchmo_check
Checking your satchmo configuration.
Using Django version 1.1 alpha 1
Using Satchmo version 0.9-pre-SVN-unknown
Your configuration has no errors.

Syncdb and load intial data

24) python syncdb
25) python satchmo_load_l10n
26) python satchmo_load_store
27) python satchmo_load_us_tax


28) python runserver

Your store is ready.

29) http://localhost:8000/store

when you enter above URL you will be seeing a store and all the functionality which is being provided by satchmo out of box.

You can delete all the data which is provided by satchmo by running the below command

30) python delete_all_dbs

You can see all the intial settings and configuration details at

31) http://localhost:8000/settings

YOu can see the admin interface by entering the below url

32) http://localhost:8000/admin

##Satchmo Customization: Satchmo has powerfull customization mechanism using which you can tune the store to suit your business needs.The below are basic customizations which you can do.Please refer to documentation for more complex customizations and features.

####To add new products and category etc You need to go to admin interface to add new categories,products,pricing,discounts,option groups,images etc…..

More information about this details at:

####Selling different product types Using satchmo you can also sell products such as Downloadable Product where customer downloads data/other information after paying amount, you can also sell subscription product for which customers have to pay every month.

####Custom product types YOu can also create custom product types by following the below approach. YOu need to create a model which participates in one-to-one relation ship with the default product model as below

from django.db import models
from django.utils.translation import ugettext_lazy as _

from product.models import Product

class MyNewProduct(models.Model):
    product = models.OneToOneField(Product, verbose_name=_('Product'),

def _get_subtype(self):
    return 'MyNewProduct'

def __unicode__(self):
    return u"MyNewProduct: %s" %

class Admin:

class Meta:
    verbose_name = _('My New Product')
    verbose_name_plural = _('My New Products')
  1. Thereafter you need tell satchmo about this product type in,add to to make it visible via admin etc..More details you can find in the below link:

In addition to above you can do various other customizations like CSS,Template,URL,Checkout process,Shipping module customization,Payment module.

More details at satchmo documentation

And important details related to above customizations in the next blog post.

Stay Tuned.

Thank you for reading the Agiliq blog. This article was written by rama on Mar 26, 2009 in satchmo .

You can subscribe ⚛ to our blog.

We love building amazing apps for web and mobile for our clients. If you are looking for development help, contact us today ✉.

Would you like to download 10+ free Django and Python books? Get them here