+ All Categories
Home > Technology > Django for Beginners

Django for Beginners

Date post: 29-Jan-2018
Category:
Upload: jason-davies
View: 23,218 times
Download: 0 times
Share this document with a friend
41
An Introduction Jason Davies PyCon UK 2007
Transcript
Page 1: Django for Beginners

An Introduction

Jason DaviesPyCon UK 2007

Page 2: Django for Beginners

Django Reinhardt

Page 3: Django for Beginners

ljworld.com

Page 4: Django for Beginners
Page 5: Django for Beginners

www.djangoproject.com

Page 6: Django for Beginners
Page 7: Django for Beginners
Page 8: Django for Beginners
Page 9: Django for Beginners

Overview of this Tutorial

➔Brief introduction and philosophy➔Creating Django models➔The automatic admin interface➔Views (and URLs)➔Templates➔Comparison with other frameworks

Page 10: Django for Beginners

Django's Mission Statement

“Django is a high-level Python web framework that encourages rapid

development and clean, pragmatic design.”

Page 11: Django for Beginners

Django Requirements

➔Python (2.3+)➔PostgreSQL / MySQL / SQLite / ...➔Apache + mod_python / FastCGI / ...

Page 12: Django for Beginners

“Projects”

$ django-admin.py startproject myproject$ django-admin.py startproject myproject

Page 13: Django for Beginners

myproject/myproject/ __init__.py__init__.py manage.pymanage.py settings.pysettings.py urls.pyurls.py

Page 14: Django for Beginners

$ ./manage.py runserver$ ./manage.py runserverValidating models...0 errors found.

Django version 0.96-pre, using settings 'myproject.settings'Development server is running at http://127.0.0.1:8000/Quit the server with CONTROL-C.

Page 15: Django for Beginners
Page 16: Django for Beginners

“Apps”

$ django-admin.py startapp blog$ django-admin.py startapp blog

Page 17: Django for Beginners

myproject/ blog/ __init__.py models.py views.py __init__.py manage.py settings.py urls.py

Page 18: Django for Beginners

Creating Models

from django.db import modelsfrom django.db import models

class Blog(models.Model):class Blog(models.Model): title = models.CharField(maxlength=200)title = models.CharField(maxlength=200)

class Post(models.Model):class Post(models.Model): title = models.CharField(maxlength=200)title = models.CharField(maxlength=200) body = models.TextField()body = models.TextField() blog = models.ForeignKey(Blog)blog = models.ForeignKey(Blog) pub_date = models.DateTimeField()pub_date = models.DateTimeField()

Page 19: Django for Beginners

Activating Models

$ ./manage.py syncdbCreating table blog_blogCreating table blog_postLoading 'initial_data' fixtures...No fixtures found.

Page 20: Django for Beginners

Activating the Admin Interfacefrom django.db import modelsfrom django.db import models

class Blog(models.Model):class Blog(models.Model): title = models.CharField(maxlength=200)title = models.CharField(maxlength=200)

class Admin:class Admin: list_display = ['title']list_display = ['title']

class Post(models.Model):class Post(models.Model): title = models.CharField(maxlength=200)title = models.CharField(maxlength=200) body = models.TextField()body = models.TextField() blog = models.ForeignKey(Blog)blog = models.ForeignKey(Blog) pub_date = models.DateTimeField()pub_date = models.DateTimeField()

class Admin:class Admin: list_display = ['title', 'pub_date']list_display = ['title', 'pub_date']

Page 21: Django for Beginners
Page 22: Django for Beginners
Page 23: Django for Beginners

Model API

$ ./manage.py shell

>>> from myproject.blog import Blog>>> b = Blog(... title=”Jason's Fantastic Blog!!!”)>>> b.save()

Page 24: Django for Beginners

>>> all_blogs = Blog.objects.all()>>> all_blogs = Blog.objects.all()>>> print all_blogs>>> print all_blogs[<Blog: Blog object>][<Blog: Blog object>]

>>> print all_blogs.name>>> print all_blogs.nameJason's Fantastic Blog!!!Jason's Fantastic Blog!!!

>>> b = Blog.objects.get(name__contains='Jason')>>> b = Blog.objects.get(name__contains='Jason')>>> print b.title>>> print b.titleJason's Fantastic Blog!!!Jason's Fantastic Blog!!!

Page 25: Django for Beginners

URLs

ROOT_URLCONF = 'myproject.urls'ROOT_URLCONF = 'myproject.urls'

Page 26: Django for Beginners

URLconfs

from django.conf.urls.defaults import *from django.conf.urls.defaults import *from myproject.blog.views import *from myproject.blog.views import *

urlpatterns = patterns('',urlpatterns = patterns('', (r'^admin/', include('django.contrib.admin.urls')),(r'^admin/', include('django.contrib.admin.urls')),

(r'^blog/$', post_list),(r'^blog/$', post_list), (r'^blog/(?P<id>\d+)/$', post_list),(r'^blog/(?P<id>\d+)/$', post_list),

))

Page 27: Django for Beginners

Views

from django.http import HttpResponsefrom django.http import HttpResponse

def post_list(request):def post_list(request): return HttpReponse(“This is a list of posts!”)return HttpReponse(“This is a list of posts!”)

Page 28: Django for Beginners

from django.http import HttpResponsefrom django.http import HttpResponsefrom myproject.blog.models import Postfrom myproject.blog.models import Post

def post_list(request):def post_list(request): r = “<ul>”r = “<ul>” posts = Post.objects.order_by(“-pub_date”)posts = Post.objects.order_by(“-pub_date”) for post in posts:for post in posts: r += “<li>%s: %s</li>” % (post.title, post.body)r += “<li>%s: %s</li>” % (post.title, post.body) r += “</ul>”r += “</ul>” return HttpResponse(r)return HttpResponse(r)

More realistic...

Page 29: Django for Beginners

from django.shorcuts import render_to_responsefrom django.shorcuts import render_to_responsefrom myproject.blog.models import Postfrom myproject.blog.models import Post

def post_list(request):def post_list(request): posts = Post.objects.order_by(“-pub_date”)posts = Post.objects.order_by(“-pub_date”) return render_to_response('blog/post_list.html', {return render_to_response('blog/post_list.html', { 'post_list': posts,'post_list': posts, })})

Better!

Page 30: Django for Beginners

from django.shorcuts import render_to_responsefrom django.shorcuts import render_to_responsefrom myproject.blog.models import Postfrom myproject.blog.models import Post

def post_detail(request, id):def post_detail(request, id): post = get_object_or_404(Post, id=id)post = get_object_or_404(Post, id=id) return render_to_response('blog/post_detail.html', {return render_to_response('blog/post_detail.html', { 'post': post,'post': post, })})

For completeness...

Page 31: Django for Beginners

Templates

<html> <body> <h1>Jason's Fantastic Blog!!!</h1> <ul> {% for p in post_list %} <li> <a href=”{{ p.id }}/”>{{ p.title|escape }}</a> </li> {% endfor %} </ul> </body></html>

Page 32: Django for Beginners

The magic dot

➔p[“name”]➔p.name➔p.name()

Page 33: Django for Beginners

Filters

{{ var|escape|linebreaks|... }}

Page 34: Django for Beginners

base.html

<html> <head> <title>{% block title %}{% endblock %} </head> <body> <div id=”content”> {% block content %}{% endblock %} </div> <div id=”footer”> {% block footer %} Copyright Jason Davies 2007. {% endblock %} </div> </body></html>

Page 35: Django for Beginners

{% extends “base.html” %}

{% block title %} Posts | {{ block.super }}{% endblock %}

{% block content %} <h1>Blog Posts ({{ post_list|length }} total)</h1> <ul> {% for post in post_list %} <li> <a href=”{{ post.id }}/”> {{ post.title|escape }} </a> </li> {% endfor %} </ul>{% endblock %}

Page 36: Django for Beginners

Ruby on Rails

http://www.rubyonrails.org/

Page 37: Django for Beginners

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

Page 38: Django for Beginners

Thank you for listening.

Jason [email protected]

http://www.jasondavies.com/

Page 39: Django for Beginners

http://www.mercurytide.co.uk/whitepapers/django-cheat-sheet/

Page 40: Django for Beginners
Page 41: Django for Beginners

Recommended