39
Introduction to Django Master en Software Libre Caixanova May 22 nd 2009

Django Intro

Embed Size (px)

DESCRIPTION

An Introduction to Django given at the Master en Software Libre Caixanova.

Citation preview

Page 1: Django Intro

Introduction to Django

Master en Software Libre Caixanova

May 22nd 2009

Page 2: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

whoami

● Portuguese since 1985● GTK+ developer● Proud Pythonista● Djangonaut since 2007● Igalian since 2008

And if you insist... http://www.joaquimrocha.com

Page 3: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

My Latest Django Project

Ranchohttp://www.getrancho.com

Page 4: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

What's Django

Page 5: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

What's Django?

"Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design."

From Django official website

Page 6: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Young But Strong

● Internal project of Lawrence Journal-World in 2003

● Should help journalists meet fast deadlines● Should not stand in the journalists' way● Got its name after the famous guitarrist Django

Reinhardt

Page 7: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

The Framework

● Object-Relational Mapper● Automatic Admin Interface● Elegant URL Design● Powerful Template System● i18n

it's amazing...!

Page 8: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

MTV

Model-Template-View

● Model: What things are● Templates: How things are presented● Views: How things are processed

Page 9: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Deployment

● FastCGI● mod_python● mod_wsgi● ...

Page 10: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

DB Backend

● PostgreSQL● MySQL● SQLite● Oracle

Page 11: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Big Community

● Django People: – http://djangopeople.net

● Django Pluggables:– http://djangopluggables.com

● Django Sites:– http://www.djangosites.org

● ...

Page 12: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Using Django

Page 13: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Installation

Just get a tarball release or checkout the sources:

http://www.djangoproject.com/download/

Then:

# python setup.py install

... yeah, that it!

Page 14: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Development

Django Projects have applications

Page 15: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Project

$ django-admin.py startproject Project

Project/ __init__.py manage.py settings.py urls.py

Page 16: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Project

Does it work?

$ ./manage.py runserver

Page 17: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Project

Page 18: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Applications

Apps are the project's components

$ ./manage.py startapp recipe

recipe/ __init__.py models.py tests.py views.py

Page 19: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Configuration

settings.py

Easy configuration

Page 20: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Building The Database

$ ./manage.py syncdb

Page 21: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Models

models.py, series of classes describing objects

Represent the database objects.Never touch SQL again!

Page 22: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Models

class Post(models.Model): title = models.CharField(max_length = 500) content = models.TextField() date = models.DateTimeField(auto_now = True) ...

Page 23: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Views

views.py, series of functions that will normally process some models and render HTML

Where the magic happen!

How to get all blog posts from the latest 5 days and order them by descending date?

Page 24: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Views

import datetime

def view_latest_posts(request): # Last 5 days date = datetime.datetime.now() - datetime.timedelta(5) posts = Post.objects.filter(date__gte = date).order_by('-date')

return render_to_response('posts/show_posts.html', {'posts': posts})

Page 25: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Template

Will let you not repeat yourself!

Will save designers from the code.

Page 26: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Template

<html> <head> <title>{% block title %}{% endblock %}</title> </head> <body> {% block content %}{% endblock %} </body></html>

Page 27: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Template

{% extends "base.html" %}

{% block title %}Homepage{% endblock %}

{% block content %} <h3>This will be some main content</h3>

{% for post in posts %} <h4>{{ post.title }} on {{ post.date|date:"B d, Y"|upper }}<h4>

<p>{{ post.content }}</p> {% endfor %}

{% url project.some_app.views.some_view some arguments %}

{% endblock %}

Page 28: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

URLs

In Django, URLs are part of the design!

Page 29: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

URLs

urls.py use regular expressions to match URLs with views

urlpatterns = patterns('Project.some_app.views', (r'^$', 'index'),

(r'^posts/(?P<r_id>\d+)/$', 'view_latest_posts'),

(r'^create/$', 'create'),)

Page 30: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Forms

forms.py, series of classes that represent an HTML form

Will let you easily configure the expected type of the inputs, error messages, labels, etc...

Page 31: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Forms

class CreatePost(forms.Form): title = forms.CharField(label = "Post Title",

max_length = 500, widget = forms.TextInput(attrs={

'class': 'big_entry' }))

content = forms.CharField() tags = forms.CharField(required = False)

Page 32: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Forms

def create_post(request): if request.method == 'POST': form = CreatePost(request.POST) if form.is_valid(): # Create a new post object with data # from form.cleaned_data return HttpResponseRedirect('/index/') else: form = CreatePost()

return render_to_response('create.html', { 'form': form, })

Page 33: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Forms

The quick way...

<form action="/create/" method="POST"> {{ form.as_p }} <input type="submit" value="Create" /></form>

Page 34: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Performance

Page 35: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Performance

For those who doubt...

http://www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks/

Page 36: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

Page 37: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

HELP!

Page 38: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

HELP!

Django Docs

http://docs.djangoproject.com

Some books

● Learning Website Development with Django, Packt

● Practical Django Projects, Apress● Pro Django, Apress

Page 39: Django Intro

MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]

End

Thank you!

Questions?