Django Intro
-
Upload
joaquim-rocha -
Category
Technology
-
view
1.895 -
download
0
description
Transcript of Django Intro
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