SlideShare a Scribd company logo
Intro to Pinax
       Kickstarting Your Django Apps
               SyPy - November 2011




    Roger Barnes                 @mindsocket
roger@mindsocket.com.au     http://gplus.to/mindsocket
Who am I

   Roger Barnes   BTech ICS

   By day: Tech Lead/Applications Developer   Java :(

   By night: Up and coming Python ninja
Topics

   Intro to Django
   Intro to Pinax
   Alternatives
   Development Tips
   Q&A
What is Django

   ”The web framework for perfectionists with
                 deadlines”

Initially developed in an online news environment

        Designed for rapid development
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, ...
Django is...


         … really well documented

       https://docs.djangoproject.com
Example: More Betterer

   My first Django app
       Goal 1: Learn some Python and Django
       Goal 2: Find out what photos people liked
Example: More Betterer

   Very simple models
       Item (an image)
       Challenge (a showdown between 2 items)
   Item manager
       counts challenge votes
       provides ordered list
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)
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)
What is Pinax

   Social friendly
       Comments
       Voting
       Notifications
       Profiles/Accounts/OAuth
       ...
   Startup friendly
       Private beta
       Invite codes
       Starter projects
When to use Pinax


Great for building and maintaining multiple sites
                    … quickly

 Not as much benefit for a big enterprise app
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
Example: Now and Then



  An application for aligning and overlaying
  historical images with modern equivalents
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
Example: Now and Then
Pinax – Primary Features

   Project conventions
       Layout
       Deployment
   Requirements - pip dependencies
   Templates - quick prototyping
   Core and reusable apps
       Back- and front-end functionality
   Starter projects
       Basis for a Django site, several options
Pinax - Layout
|--   apps                 |--   fixtures
|     |-- about            |     `-- initial_data.json
|     |    |-- models.py   |--   locale
|     |    |-- urls.py     |     |-- ...
|     |    |-- views.py    |--   manage.py
|     |-- my_foo_app       |--   media
|     |    |-- ...         |     |-- css
|     |-- ...              |     |   `-- site_tabs.css
|     |    |-- ...         |     |-- ...
|--   deploy               |--   requirements
|     |-- pinax.fcgi       |     |-- base.txt
|     `-- pinax.wsgi       |     `-- project.txt
|--   dev.db               |--   settings.py
                           |--   templates
                           |     |-- about
                           |     |-- account
                           |     |-- ...
                           |--   tests
                           |     |-- ...
                           |--   urls.py
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
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
Pinax
   Starter projects
       zero
       basic
       account
       static
       private_beta
       cms_company
       intranet
       social
       cms_holidayhouse
       company
       sample_group
       code
Pinax

           Fairly well documented
        http://pinaxproject.com/docs/

              Code on github
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/
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
Pinax – Idea to Launch


         The next big social network
         mytweetbooktubelyplus.com

   Domain name is not currently registered.
           Available for you now!
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”
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!
Alternatives to Pinax

   Hand-pick your own bundled apps
       PyPI
       Djangopackages.com
   Other starter projects on github
       Eg: django-party-pack
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
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
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/')
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 …
Dev tips - Continuous Integration

   Jenkins                 Build triggered by commit (or polled)
       unittest2
       django-jenkins
       coverage
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
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
Development tips
References
   Django
        https://www.djangoproject.com/
        http://djangopackages.com/
   Pinax
        http://pinaxproject.com/ & http://pinaxproject.com/ecosystem/
        https://github.com/pinax/pinax
        http://pinaxproject.com/blog/2011/10/10/djangocon-talk-pinax-after-three-years
   My apps/code
        http://bit.ly/morebetterer
        http://nowandthen.mindsocket.com.au/
        https://github.com/mindsocket/
   Twitter Bootstrap
        http://twitter.github.com/bootstrap/
Q&A

More Related Content

PPT
Pinax Long Tutorial Slides
PDF
GR8Conf 2009. The Grails Plugin System by Graeme Rocher
PPTX
Building JavaScript
PPT
Freelancer Weapons of mass productivity
PDF
State Of Opensocial
PDF
Building Video Applications with YouTube APIs
PDF
Rentabiliza Tu Red Social
PDF
tech data Annual report 2002
Pinax Long Tutorial Slides
GR8Conf 2009. The Grails Plugin System by Graeme Rocher
Building JavaScript
Freelancer Weapons of mass productivity
State Of Opensocial
Building Video Applications with YouTube APIs
Rentabiliza Tu Red Social
tech data Annual report 2002

Viewers also liked (14)

PPTX
Keep In Touch: Channel, Expectation and Experience
PDF
PROGRAMA PROMESAS CADIZ 1ªFASE
PDF
Schweppes Antiox business case
PDF
Matrix mtx m2_m_presentation_2013_june_v11
PDF
Can ufo doc_7
DOCX
Fundamentos Mejor En Bici
DOCX
econozco
PDF
Sociedad Civil y Colegios profesionales
PDF
Animations à Saint-Lary du 19 mars au 3 avril 2016
PDF
Revista Cisco Live ed 14
PDF
A2 martín-alba-mi presentacion
PDF
EDUCACION
PDF
EAGES Proceedings - Hanno Fischer 2
PDF
Manual diseno-puesta-a-suelo 2 resistividades
Keep In Touch: Channel, Expectation and Experience
PROGRAMA PROMESAS CADIZ 1ªFASE
Schweppes Antiox business case
Matrix mtx m2_m_presentation_2013_june_v11
Can ufo doc_7
Fundamentos Mejor En Bici
econozco
Sociedad Civil y Colegios profesionales
Animations à Saint-Lary du 19 mars au 3 avril 2016
Revista Cisco Live ed 14
A2 martín-alba-mi presentacion
EDUCACION
EAGES Proceedings - Hanno Fischer 2
Manual diseno-puesta-a-suelo 2 resistividades
Ad

Similar to Intro to Pinax: Kickstarting Your Django Apps (20)

PDF
SciPy 2025 - Packaging a Scientific Python Project
PPT
PPTX
First python project
PDF
Introduction to Pinax
PPTX
Django Architecture Introduction
PDF
Django dev-env-my-way
PDF
Heroku pycon
PDF
Digital RSE: automated code quality checks - RSE group meeting
PPTX
Django rest framework
PPTX
Real world GitOps with Activiti
PDF
PDF
Python+gradle
PPTX
PDF
Princeton RSE: Building Python Packages (+binary)
PDF
Princeton RSE Peer network first meeting
PDF
Intro to Web Development Using Python and Django
ODP
Web Development in Django
PDF
Python Dependency Management - PyconDE 2018
PDF
How to Contribute to Pinax
PDF
Scientist meets web dev: how Python became the language of data
SciPy 2025 - Packaging a Scientific Python Project
First python project
Introduction to Pinax
Django Architecture Introduction
Django dev-env-my-way
Heroku pycon
Digital RSE: automated code quality checks - RSE group meeting
Django rest framework
Real world GitOps with Activiti
Python+gradle
Princeton RSE: Building Python Packages (+binary)
Princeton RSE Peer network first meeting
Intro to Web Development Using Python and Django
Web Development in Django
Python Dependency Management - PyconDE 2018
How to Contribute to Pinax
Scientist meets web dev: how Python became the language of data
Ad

More from Roger Barnes (6)

PDF
The life of a web request - techniques for measuring and improving Django app...
PDF
Building data flows with Celery and SQLAlchemy
ODP
Introduction to SQL Alchemy - SyPy June 2013
PDF
Poker, packets, pipes and Python
PDF
Towards Continuous Deployment with Django
PDF
Scraping recalcitrant web sites with Python & Selenium
The life of a web request - techniques for measuring and improving Django app...
Building data flows with Celery and SQLAlchemy
Introduction to SQL Alchemy - SyPy June 2013
Poker, packets, pipes and Python
Towards Continuous Deployment with Django
Scraping recalcitrant web sites with Python & Selenium

Recently uploaded (20)

PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Approach and Philosophy of On baking technology
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Encapsulation theory and applications.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Spectroscopy.pptx food analysis technology
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Approach and Philosophy of On baking technology
Spectral efficient network and resource selection model in 5G networks
NewMind AI Weekly Chronicles - August'25 Week I
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Network Security Unit 5.pdf for BCA BBA.
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Chapter 3 Spatial Domain Image Processing.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
“AI and Expert System Decision Support & Business Intelligence Systems”
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Encapsulation theory and applications.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Programs and apps: productivity, graphics, security and other tools
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Spectroscopy.pptx food analysis technology

Intro to Pinax: Kickstarting Your Django Apps

  • 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
  • 17. Pinax – Primary Features  Project conventions  Layout  Deployment  Requirements - pip dependencies  Templates - quick prototyping  Core and reusable apps  Back- and front-end functionality  Starter projects  Basis for a Django site, several options
  • 18. Pinax - Layout |-- apps |-- fixtures | |-- about | `-- initial_data.json | | |-- models.py |-- locale | | |-- urls.py | |-- ... | | |-- views.py |-- manage.py | |-- my_foo_app |-- media | | |-- ... | |-- css | |-- ... | | `-- site_tabs.css | | |-- ... | |-- ... |-- deploy |-- requirements | |-- pinax.fcgi | |-- base.txt | `-- pinax.wsgi | `-- project.txt |-- dev.db |-- settings.py |-- templates | |-- about | |-- account | |-- ... |-- tests | |-- ... |-- urls.py
  • 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 …
  • 33. Dev tips - Continuous Integration  Jenkins  Build triggered by commit (or polled)  unittest2  django-jenkins  coverage
  • 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
  • 37. References  Django  https://www.djangoproject.com/  http://djangopackages.com/  Pinax  http://pinaxproject.com/ & http://pinaxproject.com/ecosystem/  https://github.com/pinax/pinax  http://pinaxproject.com/blog/2011/10/10/djangocon-talk-pinax-after-three-years  My apps/code  http://bit.ly/morebetterer  http://nowandthen.mindsocket.com.au/  https://github.com/mindsocket/  Twitter Bootstrap  http://twitter.github.com/bootstrap/
  • 38. Q&A