a basic django introduction
DESCRIPTION
TRANSCRIPT
Web Development With Django
A Basic Introduction
Ganga L
Python Frameworks
Django
CherryPy
Pylons
Flask
Bottle
Tipfy
Pyramid
Cubic Web
GAE framework
Outline
What Is Django?
Project Structure
Data Handling
The Admin Interface
Django Forms
Views
Templates
What Is Django?
High-level framework for rapid web development
Complete stack of tools
Data modelled with Python classes
Production-ready data admin interface, generated dynamically
Elegant system for mapping URLs to Python code
Generic views’ to handle common requests
Clean, powerful template language
Components for user authentication, form handling, caching . . .
Creating Projects & Apps
Creating a project:
django-admin.py startproject mysite
Creating an app within a project directory:
cd mysite
./manage.py startapp poll
Project Structure
A Python package on your PYTHONPATH
Holds project-wide settings in settings.py
Holds a URL configuration (URLconf) in urls.py
Contains or references one or more apps
App
A Python package on your PYTHONPATH
(typically created as a subpackage of the project itself)
May contain data models in models.py
May contain views in views.py
May have its own URL configuration in urls.py
Up & Running
Set PYTHONPATH to include parent of your project directory
Define new environment variable DJANGO_SETTINGS_MODULE,
setting it to project settings (mysite.settings)
3 Try running the development server:
/manage.py runserver
Creating The Database
Create database polls in youe database
Sync installed apps with database:
./manage.py syncdb
Create Project
Create Project mysite
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
Create Application
python manage.py startapp polls
polls/
__init__.py
models.py
tests.py
views.py
Create Models
from django.db import models
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_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
The Data Model
A description of database layout, as a Python class
Normally represents one database table
Has fields that map onto columns of the table
Many built-in field types
CharField, TextField IntegerField, FloatField, DecimalField DateField, DateTimeField, TimeField EmailField, URLField ForeignKey . . .
Installed App
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
python manage.py syncdb
Registering Models in Admin
In admin.py in the Poll app:
from django.contrib import adminfrom mysite.polls.models import Poll
admin.site.register(Poll)
In urls.py:
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)),)
Provide ready-made logic for many common tasks:
Issuing a redirect Displaying a paginated list of objects Displaying a ‘detail’ page for a single object Yearly, monthly or daily listing of date-based
objects ‘Latest items’ page for date-based objects Object creation, updating, deletion (with/without
authorisation)
Generic Views
Generic Views Example
views.py
def index(request): return HttpResponse("Hello, world. You're at the poll index.")
from django.conf.urls.defaults import *from polls import views
urlpatterns = patterns('', url(r'^$', views.index, name='index'))
Url.py
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('',url(r'^polls/', include('polls.urls')),url(r'^admin/', include(admin.site.urls)),
)
views.py
Main URL.py
Creating & Saving Objects
Invoke constructor and call save method:
call create method of Club model manager:
poll = Poll(question='what is your DOB? ', year='1986)poll.save()
Poll.objects.create(question='what is your DOB? ', year='1986)
View Function
Takes an HTTPRequest object as a parameter
Returns an HTTPResponse object to caller
Is associated with a particular URL via the URLconf
from datetime import datefrom django.http import HttpResponse
def today(request):html = '<html><body><h2>%s</h2></body></html>' % date.today()return HttpResponse(html)
from django.shortcuts import render_to_responseFrom mysite.polls.models import Poll
def poll_details(request):today = date.today()poll_data = Poll.objects.all()return render_to_response('clubs.html', locals(), context_instance =
RequestContext(request))
HTTP Response
Templates
Text files containing
Variables, replaced by values when the template is rendered[
{{ today }} Filters that modify how values are displayed
{{ today|date:"D d M Y" }} Tags that control the logic of the rendering
process {% if name == "nick" %} <p>Hello, Nick!</p> {% else %} <p>Who are you?</p> {% endif %}
Template Example
settings.py
TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), 'templates'),)
templates/club/club_list.html
{% extends "base.html" %}{% block title %}Clubs{% endblock %}{% block content %}
<h1>Clubs</h1><ol>
{% for club in clubs %}<li>{{ club }}</li>
{% endfor %}</ol>
{% endblock %}
Django Forms
A collection of fields that knows how to validate itself and display itself as HTML.
Display an HTML form with automatically generated form widgets.
Check submitted data against a set of validation rules.
Redisplay a form in the case of validation errors.
Convert submitted form data to the relevant Python data types.
Django Model Forms
from django.forms import ModelForm
import mysite.polls.models import Poll
class PollForm(ModelForm):
class Meta:
model = Pole
A Basic Django Forms
Standard Views.py
Standard Views.py
Standard Views.py
Easy Views.py
Easy Views.py
Summary
We have shown you
The structure of a Django project How models represent data in Django applications How data can be stored and queried via model
instances How data can be managed through a dynamic
admin interface How functionality is represent by views, each
associated
with URLs that match a given pattern How views render a response using a template
Thank You