Generating a pdf from an image using PIL and django

By : Saket Bhushan

In this post we shall be performing small image manipulation on the server side and allowing the user to download the pdf. This might be found useful if you design a quiz app and want to generate a certificate for the users. The various methods which can be followed to generate the certificate are:

  1. Have an image file to serve as a template, use css to place the username at the desired location.
  2. Have a pdf file, which can be edited to take the username of the current user if he has passed certain test.
  3. Have an image template ready ...

more info..

Dynamically attaching SITE_ID to Django Caching

By : Anoop Thomas Mathew

It would be useful and convenient, if you have an automatic way to add the SITE_ID, especially, when you have multiple sites running on the same deployment. Django provides a cache prefix function KEY_FUNCTION in settings which can be used to achieve this.

Just follow the following steps, and your cache, automatically prepends SITE_ID to the cache key, making it unique across multiple sites.

  1. Put the following into the settings file.

         CACHES = {
         'default': {
          'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
           'LOCATION': 'cache_table',
           KEY_FUNCTION = projectname.appname.modulename.functionname,
  2. Write a function to get current site id, say, get_current_site(), which returns current ...

more info..

Deploying Django apps on Heroku

By : Shabda Raaj

Read this first:

This is a great article by the Heroku. I am just filling in some more details and making this step-by-step.

  1. Get your Django project code.

  2. Create a virtualenv with a no-site-packages command

    virtualenv vent --no-site-packages
  3. Install Django, psycopg2 (postgres connector), gunicorn and any other required Django libraries.

  4. Confirm that you have all the required libraries and you can run your code locally using runserver.

  5. Create a requirement.txt by using
    pip freeze > requirements.txt
  6. Make sure you have a requirements.txt at the root of your repo. Heroku uses ...

more info..
Topics : django

Getting started with South for Django DB migrations

By : Akshar Raaj

South is a migration tool used with Django.There will be times when you would be adding fields to a model or changing the type of field (eg: Field was an IntegerField and you want to change it to FloatField). In such cases syncdb doesn't help and South comes to your rescue.

There were times when i tried "python migrate southapp", got some error and then tried "python migrate southapp 0001 --fake". In some cases, that worked. When it did not work, i tried something else and so on. There were confusions regarding what --fake ...

more info..
Topics : django South south

A brief overview of Vagrant

By : Dheeraj Sayala

Vagrant is a very good wrapper around Oracle's VirtualBox. It makes life easier for web developers and the like by providing a nice command-line interface to build, manage, provision, use virtual machines.

Why should you use Vagrant?

  • You may want to install different versions of software without worrying about conflicts
  • You don't want to remember which services to start/stop when you start working on a project
  • The version of Operating system you use can be different from the one on the server. So, you want a way to emulate the behavior on server
  • You want to develop ...

more info..

Writing jQuery plugins using Coffeescript

By : Shabda Raaj

So you want to write a Jquery plugin. If you know jQuery and Coffeescript, this would be amazingly easy.

I will walk you through writing a jQuery plugin which will allow us to add alternating colors to alternating rows.

Here is the plugin in its entirety.

$ = jQuery
$.fn.zebraTable = (options) ->
    defaults = 
        evenColor: '#ccc'
        oddColor : '#eee'

    options = $.extend(defaults, options)
    @each ->
        $("tr:even", this).css('background-color', options.evenColor)
        $("tr:odd" , this).css('background-color', options.oddColor)

Lets look at what we did.

  1. We bound $ to jQuery object.
  2. We created an anonymous functions and added this to jQuery, by assigning it to $.fn ...

more info..
Topics : coffeescript

Behind the Scenes: Request to Response

By : Thejaswi Puthraya

In the previous installment of "Behind the Scenes", we saw how the control flows from Form to File Storage. Today, we are going to see how the application reacts from request to response.

In this post, we are going to assume that we are using django's inbuilt runserver. The flow doesn't change much for other WSGI servers available.

When you invoke the runserver management command, the command line options are validated and an instance of WSGIServer is created and passed the WSGIRequestHandler, which is used to create the request object (WSGIRequest). After the request object is created and ...

more info..

Using SQLite Database with Android

By : Bala Subrahmanyam Varanasi - Where there's a will, there's a way.

Android embeds an Open Source Database called SQLite, which supports standard relational database features like SQL syntax, transactions and prepared statements. In addition it requires only little memory at runtime (approx. 250 KB). In this post I would like to show how to work with a simple pragmatic example : Baby Names App.

Before writing the code, let me show you some of the screen-shots of Baby Names App, which requires interaction with the database.

  1. When ever you launch the App, it will shows a Menu of items as below. Baby Names App Menu

  2. When we click on the highlighted button - "Common Names", it will ...

more info..
Topics : android java

Haml for Django developers

By : Shabda Raaj

Haml is taking the Ruby(and Rails) world by storm. Its not used as heavily by Python(and Django) developers as the Python solutions aren't as mature. I finally gave Haml a try and was pleasantly surprised how easy it was.

The most mature Python implementation of Haml is hamlpy, which converts the hamlpy code to Django templates. Others are shpaml and GHRML

Lets look at some templates from Django tutorial

{% if latest_poll_list %}
    {% for poll in latest_poll_list %}
        <li><a href="/polls/{{ }}/">{{ poll.question }}</a></li>
    {% endfor %}
{% endif %}

Here is this template converted to Haml

-if ...

more info..
Topics : django

Coffeescript for Python programmers

By : Shabda Raaj

I just learnt Coffeescript, and as a Python programmer loved being able to write Javascript in a Python like language. Coffeescript is inspired by Python/Ruby and is very close to these languages. Writing Coffeescript and reading the compiled Javascript also improved my understanding of Javascript. Without much ado here is translation of some Python code to Coffeescript to get you started.

Defining a variable

a = 10

a = 10

Setting scope is done via whitespaces.


if i == 10:


if i == 10

No semicolons

List comprehensions


languages = ["Python", "Coffeescript", "Java", "Ruby", "Haskell"]
languages = [lan ...

more info..
Topics : coffeescript

How to use jsTree

By : Akshar Raaj

Using jsTree

Problem Statement:

To show a TreeView (hierarchical view of information) structure in a Web page.

I came across this problem when i was required to develop a web application which allows its users to store contacts and their related information(name, email, phone). The contacts would go into a folder and any folder can have any number of subfolders and any subfolder can have any number of contacts. Also, the folder structure can be nested as many levels deep as the user wants. So, how do you show the folder structure in a Web Page?

You might encounter ...

more info..

Behind the Scenes: From HTML Form to Storage

By : Thejaswi Puthraya

In this post, we are going to see what happens behind the scenes when a file is uploaded to a django powered web application.

File Upload Flow

An HTML form with a file input (atleast one) and encoding set to multipart/form-data is submitted. The MultiPartParser parses the POST request and returns a tuple of the POST and FILES data (request.POST, request.FILES). The MultiPartParser processes the uploaded data using the File Upload Handlers objects (through the new_file, receive_data_chunk and upload_complete methods). The request.FILES values are a sequence of instances of UploadedFile.

In the django form, we pass the request.FILES ...

more info..
Topics : django files upload

Setting up your system to start with Django development on Ubuntu:

By : Akshar Raaj

1>Being a Python web framework, Django requires Python. If you are on ubuntu, you probably have python installed on your system. If you don't have it installed, give the following command from the terminal:

sudo apt-get install python

This will install Python on your machine.

2>If you will be developing a database driven web application, you need to have a database setup on your system. I feel mysql is good and will tell you about installing mysql. It is pretty easy to install and use. You need to issue the following command from terminal:

sudo apt-get install ...

more info..
Topics : django setup mysql

Django: csrf error on non-existent urls

By : Javed Khan

While testing out a API from another django site, I came across a seemingly common error.

403 Forbidden

CSRF verification failed. Request aborted.


Reason given for failure:

    No CSRF or session cookie.

Posting the data to the api endpoint returned 403 Forbidden with the standard csrf failure error page. I cross checked that the view was csrf_exempted and that CsrfViewMiddleware was not enabled. The view had some other unrelated decorators which I guessed could be the cause of the problem. According to this bug, not all decorators play nice with the csrf_exempt decorator. Even with that fixed, there was ...

more info..

Writing an e-mail application with Lamson - II

By : Thejaswi Puthraya

In the last post, we saw how to create the skeleton of a basic email application using Lamson. In this part, we'll see how to write a handler (in the controller) to open a ticket in Unfuddle, the project management tool we use at Agiliq.

If you look at the config/ file, you'll see a handlers attribute that should be updated to match the file that contains the rules for mail routing. In this case, let us create a under the app/handlers directory and update the config/

handlers = ["app.handlers.unfuddle ...

more info..
Topics : lamson e-mail

Writing an e-mail application with Lamson - I

By : Thejaswi Puthraya

Off late, we've been slightly busy with a 'lot' of new developments on our end and we've not been able to devote attention to the blog. In these busy periods, we tend to forget things faster. One such thing that Shabda recently pointed out that a couple of our applications (client and open source project) were raising exception. Because of the low frequency of these errors, they went unnoticed for quite a few days. We do check e-mail often but we are mostly drowned in our project management tool, Unfuddle. Shabda suggested we open a ticket for every ...

more info..
Topics : lamson e-mail

Comparison of mobile app frameworks: Iphone, Java, Phonegap and Titanium

By : Shabda Raaj

I recently built the same app with the common mobile technologies, Obj-C, Android:Java, Phonegap, and Titanium .

This is a quick comparison of the app frameworks.

Miscellaneous notes

  1. Phonegap and Titanium both amazed me. It feels very empowering to code in Html, css and JS, test it in Chrome, debug it with firebug, and deploy to a device without any changes. Titanium UI widgets are native, building it with JS was very cool.
  2. Phonegap and Titanium both underwhelmed me. I assumed Phonegap would have widgets which would be 95% of the way to looking like native widgets. It was easy ...

more info..

Getting started with Titanium development for Android and Iphone

By : Shabda Raaj

This is the third post in our mobile app development series. ( You may want to read Phonegap and Android with Java.)

Like last time we will build an App which allows calculating the tax payable, per the rules here. We will use Titanium Mobile

Installing Titanium

Download and install the fairly small Titanium from their sites. Once you download and start it, it will download and install more components. You can then create a new project from their UI.

Layout the Layout

You can add UI widgets and lay them out using Javascript. You need to use Titanium's API ...

more info..

Getting started with PhoneGap using Xcode for Mobile app development

By : Shabda Raaj

This is next in the series of apps I am building using various mobile technologies. It is the same app as build using Java for Android for calculating the Tax payable (in India). You can get the code for Objective-C, Java-Android, and PhoneGap.

First the impressions

Phonegap was the easiest to work with among the Objective-C, Java and PhoneGap, by far. I created the app as easily as

Step 1. Write the app and test it in Browser using the Chrome developer tools. Step 2. Start a project in Xcode. Step 3. Copy the HTML and CSS files to project ...

more info..
Topics : iphone android mobile

Starting Android app developement: From zero to app

By : Shabda Raaj

We recently started with Mobile Application development. I am learning Android using the Commonsware book, and highly recommend it. This is a very short guide to getting you running your first Android app.

What will we build

We will build a simple tax calculator for India, per the rules given here for tax calculation. In this app, we need to gets users income and various tax deductible expenses. After that we need to update the UI to show the tax. You can see the final app and code on github here.

Setting up

  1. Install Java and Eclipse
  2. Install Android SDK ...

more info..

CSS3 Properties and Compatible Browsers

By : saikiran - Designholik

CSS3 is hot, Now you can create rounded borders, add shadow to boxes without images, embed fonts and many more things.

Here is the list of some CSS properties introduced in CSS3 and their browser support.

Property Browser Support
IE9 Firefox Chrome Safari Opera
border-radius IE Firefox Chrome Safari Opera
box-shadow IE Firefox Chrome Safari Opera
border-image IE Firefox Chrome Safari Opera
text-shadow IE Firefox Chrome Safari Opera
word-wrap IE Firefox Chrome Safari Opera
@font-face IE Firefox Chrome Safari Opera
background-size IE Firefox Chrome Safari Opera
background-origin IE IE Chrome Safari Opera
transform IE Firefox Chrome Safari Opera
resize IE Firefox Chrome Safari Opera
box-sizing IE Firefox Chrome Safari Opera
outline-offset IE Firefox Chrome Safari Opera
column-count IE Firefox Chrome Safari IE
column-gap IE Firefox Chrome Safari IE
column-rule IE Firefox Chrome Safari IE
@keyframes IE IE Chrome Safari IE
animation IE IE Chrome Safari IE
transition IE IE Chrome Safari Opera

more info..
© Agiliq, 2009-2012