Upload
joaquim-rocha
View
1.895
Download
0
Embed Size (px)
DESCRIPTION
An Introduction to Django given at the Master en Software Libre Caixanova.
Citation preview
Introduction to Django
Master en Software Libre Caixanova
May 22nd 2009
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
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
My Latest Django Project
Ranchohttp://www.getrancho.com
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
What's Django
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
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
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...!
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
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
Deployment
● FastCGI● mod_python● mod_wsgi● ...
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
DB Backend
● PostgreSQL● MySQL● SQLite● Oracle
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
● ...
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
Using Django
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!
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
Development
Django Projects have applications
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
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
Project
Does it work?
$ ./manage.py runserver
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
Project
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
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
Configuration
settings.py
Easy configuration
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
Building The Database
$ ./manage.py syncdb
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!
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) ...
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?
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})
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
Template
Will let you not repeat yourself!
Will save designers from the code.
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>
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 %}
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
URLs
In Django, URLs are part of the design!
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'),)
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...
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)
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, })
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>
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
Performance
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/
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
MSWL Caixanova · Vigo · May 22nd 2009 | Joaquim Rocha | [email protected]
HELP!
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