June 13, 2011

Django-nonrel with mongoDB

June 13, 2011 2
Hi friends , I'm working with Borgets Solution. Recently I made a simple application on Django-nonrel with backend mongoDB.
Django-nonrel is an independent branch of Django that adds NoSQL database support to the ORM.Read more about the django-nonrel Django-Nonrel ...
I feel its somewhere bit complex to configure mongodb as backend on "Django-Nonrel" and make "Django-Administration" working.
lets start.

Installation


If you like to use Virtual-environment , then you can use it . Install pymongo
You need setuptools for installing pymongo , dont worry dunring installation of Pymongo , autamatically setuptools should be downloaded .
  • Download pymongo
    extract pymongo.tar.gz folder and install .
    	ashish@developer:~/Downloads $  tar -xzvf pymongo.tar.gz
    	ashish@developer:~/Downloads $  cd pymongo 
    	ashish@developer:~/Downloads/pymongo $ sudo python setup.py install 
    
  • or you can use $ easy_install pymongo

Install djangotoolbox
  • Download SourceCode of djangotoolbox and extract it > DjangoToolBox
    extract django-toolbox zip file and install .
    	ashsih@developer:~/Downloads$ unzip wkornewald-djangotoolbox-.zip
    	ashsih@developer:~/Downloads$ cd wkornewald-djangotoolbox-
    	ashsih@developer:~/Downloads/wkornewald-djangotoolbox- $ sudo python setup.py install
    

Install Django-nonrel
  • Download SourceCode of Django-Nonrel and extract it > Django-Nonrel
    	ashsih@developer:~/Downloads $ unzip wkornewald-django-nonrel-.zip 
    	ashsih@developer:~/Downloads $ cd wkornewald-django-nonrel- 
    	ashsih@developer:~/Downloads/wkornewald-django-nonrel- $ sudo python setup.py install 
    
Install MongoDB
  • Download MongoDB from official site of MongoDB and extract the Tar.gz package .
    I am using 32-bit . please prefer MongoDB installation on Linux
    	ashsih@developer:~/Downloads$ tar -xzvf mongodb-linux-.tgz 
    	ashsih@developer:~/Downloads$ cd mongodb-linux- 
    
  • Create a data directory
    	$ sudo mkdir -p /data/db/
    	$ sudo chown `id -u` /data/db
    
    You can also tell MongoDB to use a different data directory, with the --dbpath option.
    Run and connect to the server make sure that you are in MongoDB package folder .
    	ashsih@developer:~/Downloads$ cd mongodb-linux-/bin/
    	ashsih@developer:~/Downloads/mongodb-linux-/bin/ $ ./mongod				
    

Install django-mongodb-engine
  • Download source code of django-mongodb-engine from here > Django-MongoDB-Engine and extract it .
    	ashish@developer:~/Downloads$ unzip django-nonrel-mongodb-engine-.zip 
    	ashish@developer:~/Downloads$ cd django-nonrel-mongodb-engine-
    	ashish@developer:~/Downloads/django-nonrel-mongodb-engine-$ sudo python setup.py install
    

Phew !!! .. finally we completed .... :)

Let's start developing Django applcation


create new django Project
	$ django-admin.py startproject djangobookmarks
	$ cd djangobookmarks/ && python manage.py runserver
Open your browser and check > "localhost:8000" address
create new django application
	$ django-admin.py startapp bookmarks

Configuration

Database setup is easy as native django with sqlite3. Open "settings.py" and setup database "mongodb_engine".

DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine', # Add 'postgresql', 'mysql', 'sqlite3' etc.
'NAME': 'newdb', # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '27017', # Set to empty string for default. Not used with sqlite3.
}
}

Lets start mongodb engine

$mongod
$mongo

Run server
$python manage.py runserver



Yeah,Now start developing your application as other databases.Here I'm not going to teach in details.please read "django docs"

Django Admin Activation.

If you want to use Django Administration,Than it is bit tricky..
Open "settings.py" and add "django.contrib.admin" in INSTALLED_APPS.

INSTALLED_APPS = (
...default apps...
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin doc.:
# 'django.contrib.admindocs',
'bookmarks',
)

Open "urls.py" and "uncomment the lines to enable django administration"

from django.conf.urls.defaults import *

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

from bookmarks.views import *

urlpatterns = patterns('',
.....
# Uncomment the next line to enable the admin:
(r'^admin/', include(admin.site.urls)),
)

Here is my "models.py" .

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Link(models.Model):
url=models.URLField(unique=True)
def __unicode__(self):
return self.url

Bookmark(models.Model):
title=models.TextField(max_length=100)
user=models.ForeignKey(User)
link=models.ForeignKey(Link)
def __unicode__(self):
return self.title


create "admin.py" in application directory and register the models in django admin.

#!/usr/bin/env python
from django.contrib import admin
from bookmarks.models import Link,Bookmark #Models
admin.site.register(Link)
admin.site.register(Bookmark)


It will works without "django site".

Django Site registration
For more information visit django's documentation for The "Site" framework

Open "settings.py" and set SITE_ID for django_site(django administration).

Note :
Default SITE_ID is "1".That's for SQL based databases,but NoSql based DB generates Alphanumeric object Id.so we need to set that id here.
Open terminal and write.(for mongoDB)

$mongoexport -d (database_name) -c django_site
#example
$mongoexport -d mydatabase -c django_site

now,copy "id={}" and set SITE_ID="xxxxxxxxx" in "settings.py".
SITE_ID = '4dbea69bc9ce44192b00001d'



$python manage.py mongod
$python manage.py syncdb
$python manage.py runserver



Download Django_bookmark code
Thanking You !!!
Read more...

Follow Us @soratemplates