Django is a widely-used Python web application framework with a "batteries-included" philosophy. The principle behind batteries-included is that the common functionality for building web applications should come with the framework instead of as separate libraries.
For example, authentication, URL routing, a template engine, an object-relational mapper (ORM), and database schema migrations are all included with the Django framework. Compare that included functionality to the Flask framework which requires a separate library such as Flask-Login to perform user authentication.
The batteries-included and extensibility philosophies are simply two different ways to tackle framework building. Neither philosophy is inherently better than the other one.
The Django project's stability, performance and community have grown tremendously over the past decade since the framework's creation. Detailed tutorials and good practices are readily available on the web and in books. The framework continues to add significant new functionality such as database migrations with each release.
I highly recommend the Django framework as a starting place for new Python web developers because the official documentation and tutorials are some of the best anywhere in software development. Many cities also have Django-specific groups such as Django District, Django Boston and San Francisco Django so new developers can get help when they are stuck.
There are a slew of free or low cost resources out there for Django. Make sure to check the version numbers used in each post you read because Django was released over 10 years ago and has had a huge number of updates since then. These resources are geared towards beginners. If you are already experienced with Django you should take a look at the next section of resources for more advanced tutorials.
Tango with Django is an extensive set of free introductions to using the most popular Python web framework. Several current developers said this book really helped them get over the initial framework learning curve.
The Django Girls Tutorial is a great tutorial that doesn't assume any prior knowledge of Python or Django while helping you build your first web application.
A Complete Beginner's Guide to Django is a wonderful seven-part series that incrementally builds out a Django project and handles deploying the app in the final post. The seven parts are:
Test-Driven Development with Python focuses on web development using Django and JavaScript. This book uses the development of a website using the Django web framework as a real world example of how to perform test-driven development (TDD). There is also coverage of NoSQL, WebSockets and asynchronous responses. The book can be read online for free or purchased in hard copy via O'Reilly.
Django OverIQ is a project-based tutorial for beginners that covers the required features such as the Django ORM and Django Templates.
The Django subreddit often has links to the latest resources for learning Django and is also a good spot to ask questions about it.
This Django tutorial shows how to build a project from scratch using Twitter Bootstrap, Bower, Requests and the Github API.
The recommended Django project layout is helpful for developers new to Django to understand how to structure the directories and files within apps for projects.
Django for Beginners: Build websites with Python and Django by William S. Vincent is perfect if you are just getting started with Django and web development, taking you from total beginner to confident web developer with Django and Python.
Are you looking for Django videos in addition to articles? There is a special section for Django and web development on the best Python videos page.
These books and tutorials assume that you know the basics of building Django and want to go further to become much more knowledgeable about the framework.
2 Scoops of Django by Daniel Greenfeld and Audrey Roy is well worth the price of admission if you're serious about learning how to correctly develop Django websites.
The Test-Driven Development with Django, Django REST Framework, and Docker course details how to set up a development environment with Docker in order to build and deploy a RESTful API powered by Python, Django, and Django REST Framework.
User Interaction With Forms explains general web form input, how Django handles forms via POST requests, different types of input such as CharFields, DateFields and EmailFields, and validating that input.
This 3-part Django project optimization guide covers a wide range of advanced topics such as Profiling and Django settings, working with databases and caching.
Caching in Django is a detailed look at the configuration required for caching and how to measure the performance improvements once you have it in place.
Mental Models for Class Based Views provides some comparison points between class based views (CBVs) and function based views and the author's opinions for how you can better understand CBVs.
Working with time zones is necessary for every web application. This blog post on pytz and Django is a great start for figuring out what you need to know.
A Guide to ASGI in Django 3.0 and its Performance covers the new Asynchronous Server Gateway Interface (ASGI) that was introduced in Django 3.0 and explains some of the nuances and gotchas that you should consider if you decide to use it for your web apps.
REST APIs with Django: Build powerful web APIs with Python and Django by William S. Vincent is the book for you if you are just moving beyond the basics of Django and looking to get up speed with Django REST Framework (DRF) and service-oriented architecture (SOA). It also dives into more advanced topics like token-based authentication and permissions.
Django Stripe Tutorial details how to quickly add Stripe to accept payments in a Django web app.
This Python Social Auth for Django tutorial will show you how to integrate social media sign in buttons into your Django application.
Upgrading Django provides a version-by-version guide for updating your Django projects' code.
The Django Admin Cookbook and Building Multi Tenant Applications with Django are two solid "code recipe-style" free open source books that will teach you more about the admin interface as well as building projects that will be used by more than a single customer so their data needs to be properly separated.
How to Create Custom Django Management Commands
explains how to expand the default manage.py
commands list with your
own custom commands in your projects. The tutorial has a bunch of great
examples with expected output to make it easy to follow along and learn
while you work through the post.
Luke Plant writes about his approach to class based views (CBVs), which often provoke heated debate in the Django community for whether they are a time saver or "too much magic" for the framework.
Django Apps Checklist gives some good practices rules for building reusable Django apps.
Paul Hallett wrote a detailed Django 1.7 app upgrade guide on the Twilio blog from his experience working with the django-twilio package.
Real Python's migrations primer explores the difference between South's migrations and the built-in Django 1.7 migrations as well as how you use them.
Andrew Pinkham's "Upgrading to Django 1.7" series is great learning material for understanding what's changed in this major release and how to adapt your Django project. Part 1, part 2 and part 3 and part 4 are now all available to read.
Django migrations without downtimes shows one potential way of performing on-line schema migrations with Django.
How to Extend Django User Model
presents four main ways to expand upon the built-in User
model that
is packaged with Django. This scenario is very common for all but the
simplest Django projects.
Creating a Custom User Model in Django looks at how to create a custom User model in Django so that an email address can be used as the primary user identifier instead of a username for authentication.
Channels are a new mechanism in Django 1.9 provided as a standalone app. They may be incorporated into the core framework in 2.0+. Channels provide "real-time" full-duplex communication between the browser and the server based on WebSockets.
This tutorial shows how to get started with Django Channels in your project.
The channels examples repository contains a couple of good starter projects such as a live blog and a chat application to use as base code.
The Developing a Real-Time Taxi App with Django Channels and Angular course details how to create a ride-sharing app with Django Channels, Angular, and Docker. Along the way, you'll learn how to manage client/server communication with Django Channels, control flow and routing with Angular, and build a RESTful API with Django REST Framework.
Integrating Front End Tools with Django is a good post to read for figuring out how to use Gulp for handling front end tools in development and production Django sites.
Django Testing Cheat Sheet covers many common scenarios for Django applications such as testing POST requests, request headers, authentication, and large numbers of model fields in the Django ORM.
Getting Started with Django Testing will help you stop procrastinating on testing your Django projects if you're uncertain where to begin.
Testing in Django provides numerous examples and explanations for how to test your Django project's code.
Django views automated testing with Selenium gives some example code to get up and running with Selenium browser-based tests.
There are resources for JavaScript MVC frameworks such as Angular, React and Vue.js on their respective pages.
Django comes with its own custom object-relational mapper (ORM) typically referred to as "the Django ORM". Learn more about the Django ORM on the its own page and more broadly about ORMs on the Python object-relational mappers page.
Deploying and handling static and media files can be confusing for new Django developers. These resources along with the static content page are useful for figuring out how to handle these files properly.
Using Amazon S3 to Store your Django Site's Static and Media Files is a well written guide to a question commonly asked about static and media file serving.
Loading Django FileField and ImageFields from the file system shows how to load a model field with a file from the file system.
Storing Django Static and Media Files on Amazon S3 shows how to configure Django to load and serve up static and media files, public and private, via an Amazon S3 bucket.
Project templates, not to be confused with a template engine, generate boilerplate code for a base Django project plus optional libraries that are often used when developing web applications.
Caktus Group's Django project template is Django 2.2+ ready.
Cookiecutter Django is a project template from Daniel Greenfeld, for use with Audrey Roy's Cookiecutter. The template results are Heroku deployment-ready.
Two Scoops Django project template is also from the PyDanny and Audrey Roy. This one provides a quick scaffold described in the Two Scoops of Django book.
Sugardough is a Django project template from Mozilla that is compatible with cookiecutter.
Reading open source code can be useful when you are trying to figure out how to build your own projects. This is a short list of some real-world example applications, and many more can be found on the Django example projects and code page.
Openduty is a website status checking and alert system similar to PagerDuty.
Courtside is a pick up sports web application written and maintained by the author of PyCoder's Weekly.
These two Django Interactive Voice Response (IVR) system web application repositories part 1 and part 2 show you how to build a really cool Django application. There's also an accompanying blog post with detailed explanations of each step.
Taiga is a project management tool built with Django as the backend and AngularJS as the front end.
Chowist is a web application that replicates core features of Yelp and adds a couple more bells and whistles.
There are many open source projects that rely on Django. One of the best ways to learn how to use this framework is to read how other projects use it in real-world code. This section lists these code examples by class and method in Django's code base.