====== Install Django ====== We will install django on home ~ dir. mkdir ~/src cd ~/src wget http://www.djangoproject.com/download/1.3.1/tarball/ -O django.tar tar xvf django.tar cd Django-1.3.1 Install python and django in a specific directory. This will create bin & lib containing python&django in specified directory. python setup.py install --home=~/devfs/opt/ Or install django on system's python directory (preferred): sudo python setup.py install This will install django to [td@td-fed tutorial]$ ls /usr/lib/python2.7/site-packages/django/ set the PYTHONPATH env variable: export PYTHONPATH=$HOME/lib/python export PATH=$HOME/bin:$PATH Now verify that Django is installed and the right version is in your path: python >>> import django >>> print django.get_version() 1.3.1 ====== Virtualenv ====== Virtualenv/Sandbox for python env to provide consistent project settings. === Prerequisites === yum install python-pip.noarch yum install python-virtualenv.noarch === Enter virtualenv === $ virtualenv mysite-env $ source mysite-env/bin/activate (mysite-env)$ === Install python packages === (mysite-env)$ pip install Pinax ====== Creating a project ====== source: django tutorials. Start Project: $django-admin.py startproject mysite Run webserver: $python manage.py runserver Configure Database: $vim mysite/settings.py ... edit DATABASE section... Create tables: $python manage.py syncdb ====== Get dirty ====== Create Model: python manage.py startapp polls ...edit polls/model.py... class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): poll = models.ForeignKey(Poll) choice = models.CharField(max_length=200) votes = models.IntegerField() Activate model: Edit settings.py, add 'polls'. INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'polls', ) See SQL code for 'polls': python manage.py sql polls Play around * python manage.py validate -- Checks for any errors in the construction of your models. * python manage.py sqlcustom polls -- Outputs any custom SQL statements (such as table modifications or constraints) that are defined for the application. * python manage.py sqlclear polls -- Outputs the necessary DROP TABLE statements for this app, according to which tables already exist in your database (if any). * python manage.py sqlindexes polls -- Outputs the CREATE INDEX statements for this app. * python manage.py sqlall polls -- A combination of all the SQL from the sql, sqlcustom, and sqlindexes commands. Update DB: python manage.py syncdb Python API: python manage.py shell >>> from polls.models import Poll, Choice ...see django cheatsheet for DB built-in functions... ...type Poll + to see how you can start... cool!! ===== Working with models ===== * function __unicode()__ It's important to add __unicode__() methods to your models, not only for your own sanity when dealing with the interactive prompt, but also because objects' representations are used throughout Django's automatically-generated admin. * __str__()? class Poll(models.Model): *** use not or python will throws unexpected indentation. *** vim's :retab is useful for this. # ... def __unicode__(self): return self.question class Choice(models.Model): # ... def __unicode__(self): return self.choice * my_custom_function() import datetime from django.utils import timezone # ... class Poll(models.Model): # ... def was_published_recently(self): return self.pub_date >= timezone.now() - datetime.timedelta(days=1) ====== resources ======