1. Intro to Pinax
Kickstarting Your Django Apps
SyPy - November 2011
Roger Barnes @mindsocket
roger@mindsocket.com.au http://gplus.to/mindsocket
2. Who am I
Roger Barnes BTech ICS
By day: Tech Lead/Applications Developer Java :(
By night: Up and coming Python ninja
3. Topics
Intro to Django
Intro to Pinax
Alternatives
Development Tips
Q&A
4. What is Django
”The web framework for perfectionists with
deadlines”
Initially developed in an online news environment
Designed for rapid development
5. Django Framework
Object-relational mapper
Automatic admin interface
Elegant URL design
Template system
Caching
More...
i18n, syndication, generic views, schema
generation, development server, user model,
scheduled jobs, test harness, ...
6. Django is...
… really well documented
https://docs.djangoproject.com
7. Example: More Betterer
My first Django app
Goal 1: Learn some Python and Django
Goal 2: Find out what photos people liked
8. Example: More Betterer
Very simple models
Item (an image)
Challenge (a showdown between 2 items)
Item manager
counts challenge votes
provides ordered list
9. st
Lessons from 1 Django app
Django alone isn't a quickstart/shortcut for
common web 2.0 functionality
OAuth, social, tagging, voting
front-end
HTML, CSS, JS
This is true of many web frameworks
Either front- or back-end focussed
Some best practices aren't obvious
or are evolving (eg class-based views in 1.3)
10. What is Pinax
System for kickstarting Django projects
”Pinax takes care of the things that many sites
have in common so you can focus on what makes
your site different”
Quickly go from idea to launch (and beyond)
11. What is Pinax
Social friendly
Comments
Voting
Notifications
Profiles/Accounts/OAuth
...
Startup friendly
Private beta
Invite codes
Starter projects
12. When to use Pinax
Great for building and maintaining multiple sites
… quickly
Not as much benefit for a big enterprise app
13. Pinax - Pros and cons
Pros
Has a lot to offer
Easier to start with a pinax starter and adapt
Cons
Misunderstood
No recent releases (but active branches on github)
Django compatibility (Pinax 0.9a1 needed tweaks to
work with Django 1.3)
Overall: worth it
14. Example: Now and Then
An application for aligning and overlaying
historical images with modern equivalents
15. Example: Now and Then
My 2nd Django app
Goal 1: Libraryhack entry - http://libraryhack.org/
Goal 2: Learn more Django & Python!
Approx. 1 month development
Started without Pinax
got stuck on ”common functionality”
Pinax helped get past theme and account
management issues
19. Pinax
For Now and Then:
Requirements (pip)
PIL
Base aino-convert
what pinax needs django-extensions
django-memcache-status
Project django-jenkins
selenium
what you want to add pyvirtualdisplay
MySQL-python
python-memcached
flickrapi
south
django-tagging
django-voting
PyYAML
nltk
minidetector
geopy
20. Pinax
Apps
account and profile management
openid, e-mail verification, password management
notifications and activity streams
private betas and waiting lists
badges
tagging
wikis, forums and blogs
task tracking
friend and follower relations
21. Pinax
Starter projects
zero
basic
account
static
private_beta
cms_company
intranet
social
cms_holidayhouse
company
sample_group
code
22. Pinax
Fairly well documented
http://pinaxproject.com/docs/
Code on github
23. Pinax project status
Still in active development (see github)
A new release pending
Better ecosystem management
Trying to solve the ”misunderstood” problem
http://pinaxproject.com/ecosystem/
24. Pinax isn't
A silver bullet for front-end
BYO UX, design, HTML, CSS, JS skills
Some solutions
Twitter bootstrap – Pinax has a new theme
Growing collection of other themes on offer
HTML5 boilerplate
Other template + less/CSS + Javascript library
25. Pinax – Idea to Launch
The next big social network
mytweetbooktubelyplus.com
Domain name is not currently registered.
Available for you now!
26. Pinax – Idea to Launch
Steps
mkvirtualenv --no-site-packages
mytweetbooktubelyplus
pip install Pinax
pinax-admin setup_project -b social
mytweetbooktubelyplus
cd mytweetbooktubelyplus/
git init
git commit -am ”Initial commit”
27. Pinax – Idea to Launch
Steps (continued)
edit settings.py
pip install PIL
Better: add to requirements or remove dependent app
python manage.py syncdb
python manage.py runserver
Profit!
28. Alternatives to Pinax
Hand-pick your own bundled apps
PyPI
Djangopackages.com
Other starter projects on github
Eg: django-party-pack
29. Development tips
South
Schema management extension for Django
Handles updates to existing/populated DB
eg: Add/change a column in dev
Generate/deploy code to do same in test/prod
Integrates with django's management tools
30. Development tips
Environment/package management
virtualenv + pip (+ virtualenvwrapper)
For more complex deploys, look at buildout
local_settings.py (dev/test/prod)
Contains environment specific config
And passwords, add to .gitignore
In settings.py
try:
from local_settings import *
except ImportError:
pass
31. Development tips - Testing
Django + unittest2
Fixtures for testing models (tests.json)
Django Client to test views (request/response)
def test_point_list(self):
"""Tests that point_list returns a valid list of lists"""
fusion = Fusion()
fusion.points = "1,2,3,4,5,6,7,8"
self.failUnlessEqual(fusion.point_list(), [[1,2,3,4],[5,6,7,8]])
def test_fusion_edit_update(self):
self._login()
response = self.client.post('/fusion/edit/1/', {'points': '', 'cropthen': ''})
self.assertRedirects(response, '/fusion/view/1/')
32. Development tips – Testing
TODO UI tests
Selenium or similar to test UI, esp. javascript
def test_via_selenium(self):
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
browser = webdriver.Firefox()
browser.get('http://myurl...')
# TODO …
34. Development tips - Deployment
Fast all the way to production
git pull - ok for simple application
TODO: Build pipeline
TODO: Continuous Deployment
Production performance
Apache + mod-wsgi – ok
Use pinax.wsgi
May need a little hacking to get paths right
TODO: try nginx + uWSGI or similar
TODO: High availability + reverse proxy
35. Development tips – Source Control
DVCS good - Git(Hub), several alternatives
Avoid old tech (svn, cvs, vss)
Embrace branching, merging, regular commits
Fork other people's repos
Pull new changes
Pull-request – send your improvements upstream
Works with pip
pip install -e git+https://github.com/pinax/pinax-theme-bootstrap#egg=pinax-theme-bootstrap