0
12 tips on Django Best Practices
David Arcos
catchoom.com | @catchoom
12 tips on Django Best Practices
Some (personal) suggestions on:
- Development
- Deployment
- External tools

David Arcos ...
12 tips on Django Best Practices
Hi! I'm David Arcos
- Python/Django developer
- discovered Django in 2007 (v0.96)
- profe...
12 tips on Django Best Practices

- Image Recognition SaaS
- Top recognition results, shortest response times
- Easy to in...
12 tips on Django Best Practices
Why Python? PEP 20, The Zen of Python:
- “Beautiful is better than ugly”
- “Simple is bet...
12 tips on Django Best Practices
Why Django?
- "The Web framework for perfectionists with deadlines"
- Django design philo...
12 tips on Django Best Practices
Virtualenv:
- “one project, one virtualenv”
- projects with different dependencies, packa...
12 tips on Django Best Practices
Dependencies:
- use pip:
pip install catchoom
- save the dependencies in a requirements.t...
12 tips on Django Best Practices
Layout: projects and apps
- project = the full website. app = python library
repository/
...
12 tips on Django Best Practices

- use short, obvious, single-word names for your apps
- many small apps is better than a...
12 tips on Django Best Practices
Settings:
- multiple settings files:
- per environment: dev, testing, staging, production...
12 tips on Django Best Practices
Django is a MTV framework
- Model (app/models.py)
- Template (app/templates/*.html)
- Vie...
12 tips on Django Best Practices
Fat models, thin views...
- logic should go to the models (and forms, signals...)
- keep ...
12 tips on Django Best Practices

- why? Because of maintainability!
- a model is much easier to test
- reusable logic: fo...
12 tips on Django Best Practices
...and stupid templates!
- your template layer should be as thin as possible
- (by design...
12 tips on Django Best Practices
Deployment:
- web server:
- Nginx + gunicorn
- Supervisord to keep it alive.
- static ser...
12 tips on Django Best Practices
Fabric:
"a library and command-line tool for streamlining the use of SSH for
application ...
12 tips on Django Best Practices
South:
"intelligent schema and data migrations for Django projects"

- creates migration ...
12 tips on Django Best Practices
Celery:
"asynchronous task queue/job queue based on distributed message passing"

- execu...
12 tips on Django Best Practices
Redis:
"An advanced key-value store. It is often referred to as a data structure
server s...
12 tips on Django Best Practices
Sentry:
"realtime event logging and aggregation platform"
- monitor errors, get all the i...
12 tips on Django Best Practices
Debugging:
- ipython (already in ./manage.py shell)
- ipdb

import ipdb
ipdb.set_trace()
...
12 tips on Django Best Practices
Summary:
- follow the Django philosophy (when possible)
- stand on the shoulder of giants...
12 tips on Django Best Practices

Thanks for attending!
- http://slideshare.net/DZPM
- Questions?

David Arcos | @DZPM

Ca...
Questions?

catchoom.com | @catchoom
12 tips on Django Best Practices

Thanks for attending!
- http://slideshare.net/DZPM

David Arcos | @DZPM

Catchoom | http...
Upcoming SlideShare
Loading in...5
×

12 tips on Django Best Practices

27,592

Published on

Some suggestions on Django development, deployment and external tools.

2 Comments
57 Likes
Statistics
Notes
No Downloads
Views
Total Views
27,592
On Slideshare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
326
Comments
2
Likes
57
Embeds 0
No embeds

No notes for slide

Transcript of "12 tips on Django Best Practices"

  1. 1. 12 tips on Django Best Practices David Arcos catchoom.com | @catchoom
  2. 2. 12 tips on Django Best Practices Some (personal) suggestions on: - Development - Deployment - External tools David Arcos | @DZPM Catchoom | http://catchoom.com
  3. 3. 12 tips on Django Best Practices Hi! I'm David Arcos - Python/Django developer - discovered Django in 2007 (v0.96) - professionally since 2008 - Web backend, distributed systems, databases, scalability, security - Team leader at Catchoom David Arcos | @DZPM Catchoom | http://catchoom.com
  4. 4. 12 tips on Django Best Practices - Image Recognition SaaS - Top recognition results, shortest response times - Easy to integrate into your apps/services David Arcos | @DZPM Catchoom | http://catchoom.com
  5. 5. 12 tips on Django Best Practices Why Python? PEP 20, The Zen of Python: - “Beautiful is better than ugly” - “Simple is better than complex” - “Complex is better than complicated” - “Readability counts” - “Special cases aren't special enough to break the rules” - “If the implementation is hard to explain, it's a bad idea” - (…) http://www.python.org/dev/peps/pep-0020/ David Arcos | @DZPM Catchoom | http://catchoom.com
  6. 6. 12 tips on Django Best Practices Why Django? - "The Web framework for perfectionists with deadlines" - Django design philosophy: - loose coupling, less code, DRY, consistency, etc... - https://docs.djangoproject.com/en/dev/misc/design-philosophies/ - technically: tons of django apps, very good doc David Arcos | @DZPM Catchoom | http://catchoom.com
  7. 7. 12 tips on Django Best Practices Virtualenv: - “one project, one virtualenv” - projects with different dependencies, package versions - easier to deploy. Forget dependency hell! - virtualenvwrapper is a convenient tool David Arcos | @DZPM Catchoom | http://catchoom.com
  8. 8. 12 tips on Django Best Practices Dependencies: - use pip: pip install catchoom - save the dependencies in a requirements.txt file: pip freeze > requirements.txt pip install -r requirements.txt David Arcos | @DZPM Catchoom | http://catchoom.com
  9. 9. 12 tips on Django Best Practices Layout: projects and apps - project = the full website. app = python library repository/ |-- doc `-- project |-- apps | |-- app1 | |-- app2 | `-- app3 `-- settings David Arcos | @DZPM Catchoom | http://catchoom.com
  10. 10. 12 tips on Django Best Practices - use short, obvious, single-word names for your apps - many small apps is better than a few giant apps: - explain an app in a sentence. If you can't, split the app - rather than expand an app, write a new app - don't reinvent the wheel! - django.contrib - 3rd-party apps David Arcos | @DZPM Catchoom | http://catchoom.com
  11. 11. 12 tips on Django Best Practices Settings: - multiple settings files: - per environment: dev, testing, staging, production - per developer (local settings, use the hostname) - all settings files must inherit from base, so you can do: INSTALLED_APPS += ('debug_toolbar', ) - version control all the settings! David Arcos | @DZPM Catchoom | http://catchoom.com
  12. 12. 12 tips on Django Best Practices Django is a MTV framework - Model (app/models.py) - Template (app/templates/*.html) - View (app/views.py) David Arcos | @DZPM Catchoom | http://catchoom.com
  13. 13. 12 tips on Django Best Practices Fat models, thin views... - logic should go to the models (and forms, signals...) - keep the views at a minimum Good example: django.contrib.auth.models.User David Arcos | @DZPM Catchoom | http://catchoom.com
  14. 14. 12 tips on Django Best Practices - why? Because of maintainability! - a model is much easier to test - reusable logic: form validation, signals, etc - the code becomes clearer, more self-documenting David Arcos | @DZPM Catchoom | http://catchoom.com
  15. 15. 12 tips on Django Best Practices ...and stupid templates! - your template layer should be as thin as possible - (by design) django templates are limited, constrained - doesn't fit your use case? Use jinja2 in those views - Hey, but I get ugly generated HTML! - doesn't matter, you want maintainable templates David Arcos | @DZPM Catchoom | http://catchoom.com
  16. 16. 12 tips on Django Best Practices Deployment: - web server: - Nginx + gunicorn - Supervisord to keep it alive. - static server: - Nginx. Or any CDN. David Arcos | @DZPM Catchoom | http://catchoom.com
  17. 17. 12 tips on Django Best Practices Fabric: "a library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks" - to automate deployments, migrations, execute management commands, monitoring... - no more repetitive maintainance tasks done manually! David Arcos | @DZPM Catchoom | http://catchoom.com
  18. 18. 12 tips on Django Best Practices South: "intelligent schema and data migrations for Django projects" - creates migration files automatically. - You can still do changes - can do backward migrations - will avoid disasters. Use it! David Arcos | @DZPM Catchoom | http://catchoom.com
  19. 19. 12 tips on Django Best Practices Celery: "asynchronous task queue/job queue based on distributed message passing" - execute tasks asynchronously, in a pool workers - cpu-intensive or I/O-intensive tasks: - emails, pdfs, thumbnails, crawling, requests... - Celery needs a Message Queue - Instead of RabbitMQ, try Redis. David Arcos | @DZPM Catchoom | http://catchoom.com
  20. 20. 12 tips on Django Best Practices Redis: "An advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets." - store ephemeral data (active sessions) - general cache (memcached compatible) - real-time calculations: stats, monitoring, throttling... - messages: channels (pub-sub), lists (push/blpop) - indexes/filters (“sort by hits”) David Arcos | @DZPM Catchoom | http://catchoom.com
  21. 21. 12 tips on Django Best Practices Sentry: "realtime event logging and aggregation platform" - monitor errors, get all the info to do a post-mortem - uses the Python logger, easy to configure - deploy a Sentry instance - or use getsentry.com David Arcos | @DZPM Catchoom | http://catchoom.com
  22. 22. 12 tips on Django Best Practices Debugging: - ipython (already in ./manage.py shell) - ipdb import ipdb ipdb.set_trace() - django-debug-toolbar - very powerful - use it to optimize db performance, view by view David Arcos | @DZPM Catchoom | http://catchoom.com
  23. 23. 12 tips on Django Best Practices Summary: - follow the Django philosophy (when possible) - stand on the shoulder of giants: use existing apps David Arcos | @DZPM Catchoom | http://catchoom.com
  24. 24. 12 tips on Django Best Practices Thanks for attending! - http://slideshare.net/DZPM - Questions? David Arcos | @DZPM Catchoom | http://catchoom.com
  25. 25. Questions? catchoom.com | @catchoom
  26. 26. 12 tips on Django Best Practices Thanks for attending! - http://slideshare.net/DZPM David Arcos | @DZPM Catchoom | http://catchoom.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×