Django a whirlwind tour
-
Upload
brad-montgomery -
Category
Technology
-
view
469 -
download
0
description
Transcript of Django a whirlwind tour
Django: A Whirlwind Tour
Brad Montgomery
Email: [email protected]: bkmontgomery
Friday, November 2, 12
Django: Features
• Python
• ORM: Object-Relational Mapper
• MVC-inspired (MVT)
• Clean URLs
• Huge Community
• Worlds Best Documentation
Friday, November 2, 12
Batteries Includedaka: contrib apps
• admin
• auth
• comments
• gis
• syndication (atom/rss feeds)
• sitemaps
Friday, November 2, 12
https://djangoproject.com/
Friday, November 2, 12
Community
• 3rd-party, open source apps
• django-registration
• django-social-auth
• django-taggit
• django-gravatar2
• django-relationships
Friday, November 2, 12
http://djangopackages.com/
Friday, November 2, 12
So, who’s actually using Django?
Friday, November 2, 12
Disqus,Instagram,
Pintrest, Mozilla,Rdio, Bitbucket,Work for Pie,GiantBomb,The Onion
Friday, November 2, 12
Projects & Apps
• Projects are a collection of applications
• Settings
• DB Connections
• installed apps
• Filesystem paths
• Command-line tool: manage.py
Friday, November 2, 12
Projects & Apps
$ django-admin.py \ startproject \ sampleproject
Friday, November 2, 12
Projects & Apps
sampleproject/!"" manage.py#"" sampleproject !"" __init__.py !"" settings.py !"" urls.py #"" wsgi.py
Friday, November 2, 12
Projects & Apps
$ python manage.py \ startapp blog
Friday, November 2, 12
Projects & Apps
sampleproject/!"" blog !"" __init__.py !"" models.py !"" tests.py #"" views.py
Friday, November 2, 12
Modelsfrom django.db import modelsfrom django.contrib.auth.models import User
class Post(models.Model): author = models.ForeignKey(User) title = models.CharField(max_length=128) slug = models.SlugField(max_length=128, unique=True) content = models.TextField() published_on = models.DateTimeField(auto_now_add=True)
sampleproject/blog/models.py
Friday, November 2, 12
syncdb
$ python manage.py syncdb
Friday, November 2, 12
Viewsfrom django.shortcuts import render_to_responsefrom django.template import RequestContextfrom models import Post
def display_post(request, post_slug): post = Post.objects.get(slug=post_slug) template_data = {'post': post} template = "blog/post.html" return render_to_response( template, template_data, context_instance=RequestContext(request) )
sampleproject/blog/views.py
Friday, November 2, 12
Viewsfrom django.shortcuts import render_to_responsefrom django.template import RequestContextfrom models import Post
def display_post(request, post_slug): post = Post.objects.get(slug=post_slug) template_data = {'post': post} template = "blog/post.html" return render_to_response( template, template_data, context_instance=RequestContext(request) )
sampleproject/blog/views.py
Friday, November 2, 12
Viewsfrom django.shortcuts import render_to_responsefrom django.template import RequestContextfrom models import Post
def display_post(request, post_slug): post = Post.objects.get(slug=post_slug) template_data = {'post': post} template = "blog/post.html" return render_to_response( template, template_data, context_instance=RequestContext(request) )
sampleproject/blog/views.py
Friday, November 2, 12
Viewsfrom django.shortcuts import render_to_responsefrom django.template import RequestContextfrom models import Post
def display_post(request, post_slug): post = Post.objects.get(slug=post_slug) template_data = {'post': post} template = "blog/post.html" return render_to_response( template, template_data, context_instance=RequestContext(request) )
sampleproject/blog/views.py
Friday, November 2, 12
Viewsfrom django.shortcuts import render_to_responsefrom django.template import RequestContextfrom models import Post
def display_post(request, post_slug): post = Post.objects.get(slug=post_slug) template_data = {'post': post} template = "blog/post.html" return render_to_response( template, template_data, context_instance=RequestContext(request) )
sampleproject/blog/views.py
Friday, November 2, 12
Viewsfrom django.shortcuts import render_to_responsefrom django.template import RequestContextfrom models import Post
def display_post(request, post_slug): post = Post.objects.get(slug=post_slug) template_data = {'post': post} template = "blog/post.html" return render_to_response( template, template_data, context_instance=RequestContext(request) )
sampleproject/blog/views.py
Friday, November 2, 12
A base template<!DOCTYPE html><html><head> <title> {% block title %}{% endblock %} </title></head>
<body> {% block content %}{% endblock %}</body></html>
sampleproject/sampleproject/templates/base.html
Friday, November 2, 12
A base template<!DOCTYPE html><html><head> <title> {% block title %}{% endblock %} </title></head>
<body> {% block content %}{% endblock %}</body></html>
sampleproject/sampleproject/templates/base.html
Friday, November 2, 12
A post template{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Friday, November 2, 12
A post template{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Friday, November 2, 12
A post template{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Friday, November 2, 12
A post template{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Friday, November 2, 12
A post template{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Friday, November 2, 12
A post template{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Friday, November 2, 12
A post template{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Friday, November 2, 12
A post template{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Friday, November 2, 12
URL Conf’s
• Tie it all together!
• Route HTTP requests to views
• May also capture values
Friday, November 2, 12
Root URLConf
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('', url(r'^blog/(?P<post_slug>.+)/$', 'blog.views.display_post', name='display_post'), url(r'^admin/', include(admin.site.urls)),)
sampleproject/sampleproject/urls.py
Friday, November 2, 12
Root URLConf
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('', url(r'^blog/(?P<post_slug>.+)/$', 'blog.views.display_post', name='display_post'), url(r'^admin/', include(admin.site.urls)),)
sampleproject/sampleproject/urls.py
Friday, November 2, 12
Root URLConf
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('', url(r'^blog/(?P<post_slug>.+)/$', 'blog.views.display_post', name='display_post'), url(r'^admin/', include(admin.site.urls)),)
sampleproject/sampleproject/urls.py
Friday, November 2, 12
Root URLConf
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('', url(r'^blog/(?P<post_slug>.+)/$', 'blog.views.display_post', name='display_post'), url(r'^admin/', include(admin.site.urls)),)
sampleproject/sampleproject/urls.py
Friday, November 2, 12
Root URLConf
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('', url(r'^blog/(?P<post_slug>.+)/$', 'blog.views.display_post', name='display_post'), url(r'^admin/', include(admin.site.urls)),)
sampleproject/sampleproject/urls.py
Friday, November 2, 12
Root URLConf
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('', url(r'^blog/(?P<post_slug>.+)/$', 'blog.views.display_post', name='display_post'), url(r'^admin/', include(admin.site.urls)),)
sampleproject/sampleproject/urls.py
Friday, November 2, 12
An HTTP Request
Friday, November 2, 12
An HTTP Request
Friday, November 2, 12
An HTTP Request
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('', url(r'^blog/(?P<post_slug>.+)/$', 'blog.views.display_post', name='display_post'), url(r'^admin/', include(admin.site.urls)),)
sampleproject/sampleproject/urls.py
blog/sample-title/
Friday, November 2, 12
An HTTP Request
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('', url(r'^blog/(?P<post_slug>.+)/$', 'blog.views.display_post', name='display_post'), url(r'^admin/', include(admin.site.urls)),)
sampleproject/sampleproject/urls.py
blog/sample-title/
Friday, November 2, 12
An HTTP Request
def display_post(request, post_slug): post = Post.objects.get(slug=post_slug) template_data = {'post': post} template = "blog/post.html" return render_to_response( template, template_data, context_instance=RequestContext(request) )
sampleproject/blog/views.py
sample-title
Friday, November 2, 12
An HTTP Request{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Sample Title
Friday, November 2, 12
An HTTP Request{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Lorem Ipsum...
Friday, November 2, 12
An HTTP Request{% extends "base.html" %}
{% block title %} {{ post.title }}{% endblock %}
{% block content %} <h1>{{ post.title }}</h1>
{{ post.content|urlize|linebreaks }}
<p>Published on: {{ post.published_on|date:"M d, Y" }}</p>{% endblock %}
sampleproject/blog/templates/blog/post.html
Nov 3, 2012
Friday, November 2, 12
An HTTP Request
Friday, November 2, 12
Friday, November 2, 12
A Typical Stack
Linux
Friday, November 2, 12
A Typical Stack
Linux
PostgreSQL
Friday, November 2, 12
A Typical Stack
Linux
PostgreSQL
Gunicorn + Django
Friday, November 2, 12
A Typical Stack
Linux
PostgreSQL
Gunicorn + Django
nginx
Friday, November 2, 12
A Typical Stack
Linux
PostgreSQL
Gunicorn + Django
nginx
Varnish
Redis
RabbitMQ
Memcached
Friday, November 2, 12
Friday, November 2, 12
Enter: Heroku
• Deploy & Scale in the Cloud
• Provides on-demand App/DB servers
• The Heroku Toolbelt
• http://www.heroku.com/
Friday, November 2, 12
Deploying to Heroku
$ heroku create
Creating app-name... done, stack is cedarhttp://app-name.herokuapp.com/ | [email protected]:app-name.gitGit remote heroku added
Do a little bit of setup...
Friday, November 2, 12
Deploying to Heroku
$ git push heroku master
... lots of output ...
Friday, November 2, 12
Deploying to Heroku
$ heroku run python manage.py syncdb
... your typical syncdb output ...
Friday, November 2, 12
Deploying to Heroku
$ git push heroku master
Develop locally, then when you want to deploy, just run:
Friday, November 2, 12
Want to Learn More?
• Official Django Docs
• https://docs.djangoproject.com
• *Djangobook http://www.djangobook.com
• Find Apps: http://www.djangopackages.com/
• Coming Soon: http://gettingstartedwithdjango.com/
Friday, November 2, 12
Q.E.D.
Friday, November 2, 12