SlideShare a Scribd company logo
1 of 26
Download to read offline
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 | @DZPM

Catchoom | http://catchoom.com
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
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
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
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
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
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
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
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
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 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
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
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
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
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
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
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
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
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
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
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
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
12 tips on Django Best Practices

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

David Arcos | @DZPM

Catchoom | http://catchoom.com
Questions?

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

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

David Arcos | @DZPM

Catchoom | http://catchoom.com

More Related Content

What's hot

날로 먹는 Django admin 활용
날로 먹는 Django admin 활용날로 먹는 Django admin 활용
날로 먹는 Django admin 활용KyeongMook "Kay" Cha
 
Introduction to django
Introduction to djangoIntroduction to django
Introduction to djangoIlian Iliev
 
Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Tom Brander
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and DjangoMichael Pirnat
 
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운다운 정
 
Tutorial: Develop an App with the Odoo Framework
Tutorial: Develop an App with the Odoo FrameworkTutorial: Develop an App with the Odoo Framework
Tutorial: Develop an App with the Odoo FrameworkOdoo
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기Kyoung Up Jung
 
Web development with django - Basics Presentation
Web development with django - Basics PresentationWeb development with django - Basics Presentation
Web development with django - Basics PresentationShrinath Shenoy
 
The effective use of Django ORM
The effective use of Django ORMThe effective use of Django ORM
The effective use of Django ORMYaroslav Muravskyi
 
Django - Python MVC Framework
Django - Python MVC FrameworkDjango - Python MVC Framework
Django - Python MVC FrameworkBala Kumar
 
Python Interview Questions And Answers 2019 | Edureka
Python Interview Questions And Answers 2019 | EdurekaPython Interview Questions And Answers 2019 | Edureka
Python Interview Questions And Answers 2019 | EdurekaEdureka!
 
PHP Cookies and Sessions
PHP Cookies and SessionsPHP Cookies and Sessions
PHP Cookies and SessionsNisa Soomro
 
Intro to Web Development Using Python and Django
Intro to Web Development Using Python and DjangoIntro to Web Development Using Python and Django
Intro to Web Development Using Python and DjangoChariza Pladin
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to DjangoKnoldus Inc.
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of DjangoJacob Kaplan-Moss
 
A Basic Django Introduction
A Basic Django IntroductionA Basic Django Introduction
A Basic Django IntroductionGanga Ram
 

What's hot (20)

날로 먹는 Django admin 활용
날로 먹는 Django admin 활용날로 먹는 Django admin 활용
날로 먹는 Django admin 활용
 
Introduction to django
Introduction to djangoIntroduction to django
Introduction to django
 
Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Django, What is it, Why is it cool?
Django, What is it, Why is it cool?
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and Django
 
django
djangodjango
django
 
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
 
Tutorial: Develop an App with the Odoo Framework
Tutorial: Develop an App with the Odoo FrameworkTutorial: Develop an App with the Odoo Framework
Tutorial: Develop an App with the Odoo Framework
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기
 
Django Girls Tutorial
Django Girls TutorialDjango Girls Tutorial
Django Girls Tutorial
 
Python/Django Training
Python/Django TrainingPython/Django Training
Python/Django Training
 
Web development with django - Basics Presentation
Web development with django - Basics PresentationWeb development with django - Basics Presentation
Web development with django - Basics Presentation
 
The effective use of Django ORM
The effective use of Django ORMThe effective use of Django ORM
The effective use of Django ORM
 
Django - Python MVC Framework
Django - Python MVC FrameworkDjango - Python MVC Framework
Django - Python MVC Framework
 
Python Interview Questions And Answers 2019 | Edureka
Python Interview Questions And Answers 2019 | EdurekaPython Interview Questions And Answers 2019 | Edureka
Python Interview Questions And Answers 2019 | Edureka
 
PHP Cookies and Sessions
PHP Cookies and SessionsPHP Cookies and Sessions
PHP Cookies and Sessions
 
Intro to Web Development Using Python and Django
Intro to Web Development Using Python and DjangoIntro to Web Development Using Python and Django
Intro to Web Development Using Python and Django
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of Django
 
Django by rj
Django by rjDjango by rj
Django by rj
 
A Basic Django Introduction
A Basic Django IntroductionA Basic Django Introduction
A Basic Django Introduction
 

Similar to 12 tips on Django Best Practices

Decrease build time and application size
Decrease build time and application sizeDecrease build time and application size
Decrease build time and application sizeKeval Patel
 
There is something about serverless
There is something about serverlessThere is something about serverless
There is something about serverlessgjdevos
 
2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with Blackfire2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with BlackfireMarko Mitranić
 
NoSQL matters in Catchoom Recognition Service
NoSQL matters in Catchoom Recognition ServiceNoSQL matters in Catchoom Recognition Service
NoSQL matters in Catchoom Recognition ServiceCatchoom
 
Creating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with ChaperoneCreating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with ChaperoneGary Wisniewski
 
Serverless? How (not) to develop, deploy and operate serverless applications.
Serverless? How (not) to develop, deploy and operate serverless applications.Serverless? How (not) to develop, deploy and operate serverless applications.
Serverless? How (not) to develop, deploy and operate serverless applications.gjdevos
 
Version Control in Machine Learning + AI (Stanford)
Version Control in Machine Learning + AI (Stanford)Version Control in Machine Learning + AI (Stanford)
Version Control in Machine Learning + AI (Stanford)Anand Sampat
 
Web Development in Django
Web Development in DjangoWeb Development in Django
Web Development in DjangoLakshman Prasad
 
Scalable Django Architecture
Scalable Django ArchitectureScalable Django Architecture
Scalable Django ArchitectureRami Sayar
 
Make Drupal Run Fast - increase page load speed
Make Drupal Run Fast - increase page load speedMake Drupal Run Fast - increase page load speed
Make Drupal Run Fast - increase page load speedPromet Source
 
Cache all the things #DCLondon
Cache all the things #DCLondonCache all the things #DCLondon
Cache all the things #DCLondondigital006
 
The Mysteries Of JavaScript-Fu (@media SF Edition)
The Mysteries Of JavaScript-Fu (@media SF Edition)The Mysteries Of JavaScript-Fu (@media SF Edition)
The Mysteries Of JavaScript-Fu (@media SF Edition)danwrong
 
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power Tools
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power ToolsSaltConf14 - Thomas Jackson, LinkedIn - Safety with Power Tools
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power ToolsSaltStack
 
Background Processing - PyCon MY 2015
Background Processing - PyCon MY 2015Background Processing - PyCon MY 2015
Background Processing - PyCon MY 2015Kok Hoor Chew
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture IntroductionHaiqi Chen
 
Improving Drupal Performances
Improving Drupal PerformancesImproving Drupal Performances
Improving Drupal PerformancesVladimir Ilic
 
Get to know the browser better and write faster web apps
Get to know the browser better   and write faster web appsGet to know the browser better   and write faster web apps
Get to know the browser better and write faster web appsLior Bar-On
 

Similar to 12 tips on Django Best Practices (20)

Decrease build time and application size
Decrease build time and application sizeDecrease build time and application size
Decrease build time and application size
 
There is something about serverless
There is something about serverlessThere is something about serverless
There is something about serverless
 
2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with Blackfire2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with Blackfire
 
NoSQL matters in Catchoom Recognition Service
NoSQL matters in Catchoom Recognition ServiceNoSQL matters in Catchoom Recognition Service
NoSQL matters in Catchoom Recognition Service
 
Creating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with ChaperoneCreating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with Chaperone
 
Serverless? How (not) to develop, deploy and operate serverless applications.
Serverless? How (not) to develop, deploy and operate serverless applications.Serverless? How (not) to develop, deploy and operate serverless applications.
Serverless? How (not) to develop, deploy and operate serverless applications.
 
Introduce Django
Introduce DjangoIntroduce Django
Introduce Django
 
Version Control in Machine Learning + AI (Stanford)
Version Control in Machine Learning + AI (Stanford)Version Control in Machine Learning + AI (Stanford)
Version Control in Machine Learning + AI (Stanford)
 
Web Development in Django
Web Development in DjangoWeb Development in Django
Web Development in Django
 
Scalable Django Architecture
Scalable Django ArchitectureScalable Django Architecture
Scalable Django Architecture
 
Make Drupal Run Fast - increase page load speed
Make Drupal Run Fast - increase page load speedMake Drupal Run Fast - increase page load speed
Make Drupal Run Fast - increase page load speed
 
Cache all the things #DCLondon
Cache all the things #DCLondonCache all the things #DCLondon
Cache all the things #DCLondon
 
The Mysteries Of JavaScript-Fu (@media SF Edition)
The Mysteries Of JavaScript-Fu (@media SF Edition)The Mysteries Of JavaScript-Fu (@media SF Edition)
The Mysteries Of JavaScript-Fu (@media SF Edition)
 
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power Tools
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power ToolsSaltConf14 - Thomas Jackson, LinkedIn - Safety with Power Tools
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power Tools
 
Background Processing - PyCon MY 2015
Background Processing - PyCon MY 2015Background Processing - PyCon MY 2015
Background Processing - PyCon MY 2015
 
NYC_2016_slides
NYC_2016_slidesNYC_2016_slides
NYC_2016_slides
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
 
Improving Drupal Performances
Improving Drupal PerformancesImproving Drupal Performances
Improving Drupal Performances
 
Scaling PHP apps
Scaling PHP appsScaling PHP apps
Scaling PHP apps
 
Get to know the browser better and write faster web apps
Get to know the browser better   and write faster web appsGet to know the browser better   and write faster web apps
Get to know the browser better and write faster web apps
 

Recently uploaded

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 

Recently uploaded (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 

12 tips on Django Best Practices

  • 1. 12 tips on Django Best Practices David Arcos catchoom.com | @catchoom
  • 2. 12 tips on Django Best Practices Some (personal) suggestions on: - Development - Deployment - External tools David Arcos | @DZPM Catchoom | http://catchoom.com
  • 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. 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. 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. 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. 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. 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. 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. 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. 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 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 12 tips on Django Best Practices Thanks for attending! - http://slideshare.net/DZPM - Questions? David Arcos | @DZPM Catchoom | http://catchoom.com
  • 26. 12 tips on Django Best Practices Thanks for attending! - http://slideshare.net/DZPM David Arcos | @DZPM Catchoom | http://catchoom.com