django intro

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

Upload: joaquim-rocha

Post on 15-May-2015

1.895 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

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?