Essential Django Packages for 2020
Django is batteries-included, but third-party packages make it even better. Here are the essential packages for modern Django development in 2020.
Project Setup
Django Environ
Environment variables done right:
pip install django-environ
# settings.py
import environ
env = environ.Env()
environ.Env.read_env('.env')
SECRET_KEY = env('SECRET_KEY')
DEBUG = env.bool('DEBUG', default=False)
DATABASES = {
'default': env.db('DATABASE_URL')
}
Django Extensions
Developer productivity tools:
pip install django-extensions
INSTALLED_APPS = [..., 'django_extensions']
# Useful commands
python manage.py shell_plus # Auto-imports models
python manage.py show_urls # List all URLs
python manage.py graph_models -a -o models.png # Model diagram
python manage.py runserver_plus # Enhanced runserver with Werkzeug
Django Debug Toolbar
Essential for development:
pip install django-debug-toolbar
Shows:
- SQL queries and time
- Template rendering
- Request/Response details
- Cache hits/misses
- Signal details
API Development
Django REST Framework
The gold standard for APIs:
pip install djangorestframework
# serializers.py
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'email']
# views.py
from rest_framework import viewsets
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
DRF Spectacular
OpenAPI schema generation:
pip install drf-spectacular
Automatic API documentation at /api/docs/.
Authentication
Django Allauth
Social auth, email verification, everything:
pip install django-allauth
Supports:
- Google, Facebook, GitHub, Twitter
- Email/password
- Two-factor (with django-allauth-2fa)
Django REST Framework SimpleJWT
JWT for APIs:
pip install djangorestframework-simplejwt
# urls.py
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
urlpatterns = [
path('api/token/', TokenObtainPairView.as_view()),
path('api/token/refresh/', TokenRefreshView.as_view()),
]
Database
Django Filter
Easy filtering in DRF:
pip install django-filter
class ProductFilter(django_filters.FilterSet):
min_price = django_filters.NumberFilter(field_name='price', lookup_expr='gte')
max_price = django_filters.NumberFilter(field_name='price', lookup_expr='lte')
class Meta:
model = Product
fields = ['category', 'in_stock']
Django Model Utils
Helpful model mixins:
pip install django-model-utils
from model_utils.models import TimeStampedModel, SoftDeletableModel
from model_utils import Choices
class Article(TimeStampedModel, SoftDeletableModel):
STATUS = Choices('draft', 'published', 'archived')
status = models.CharField(choices=STATUS, default=STATUS.draft, max_length=20)
Caching
Django Redis
Redis cache backend:
pip install django-redis
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
}
}
Background Tasks
Celery
The standard for background jobs:
pip install celery redis
# tasks.py
from celery import shared_task
@shared_task
def send_email(user_id):
user = User.objects.get(id=user_id)
# Send email...
Django Celery Beat
Periodic tasks:
pip install django-celery-beat
Schedule tasks from Django admin.
Admin Enhancements
Django Admin Plus
Better admin experience:
pip install django-admin-plus
Or consider:
Grappelli
Sleek admin skin:
pip install django-grappelli
Django Import Export
Import/export from admin:
pip install django-import-export
Security
Django CORS Headers
Handle CORS for APIs:
pip install django-cors-headers
INSTALLED_APPS = [..., 'corsheaders']
MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware', ...]
CORS_ALLOWED_ORIGINS = ['https://example.com']
Django CSP
Content Security Policy:
pip install django-csp
Testing
Factory Boy
Test data generation:
pip install factory-boy
import factory
class UserFactory(factory.django.DjangoModelFactory):
class Meta:
model = User
username = factory.Faker('user_name')
email = factory.Faker('email')
Pytest Django
Pytest integration:
pip install pytest-django
@pytest.mark.django_db
def test_user_creation():
user = User.objects.create_user('test', 'test@example.com', 'password')
assert user.email == 'test@example.com'
Monitoring
Django Silk
SQL profiling:
pip install django-silk
View queries, request profiling in browser.
Sentry SDK
Error tracking:
pip install sentry-sdk
import sentry_sdk
sentry_sdk.init(dsn=env('SENTRY_DSN'))
Project Templates
Cookiecutter Django
Production-ready project template:
pip install cookiecutter
cookiecutter gh:cookiecutter/cookiecutter-django
Includes:
- User auth
- Docker setup
- CI configuration
- Production settings
My Essentials List
For most Django projects:
Django>=3.1
django-environ
django-extensions
djangorestframework
drf-spectacular
django-filter
django-cors-headers
django-redis
celery
sentry-sdk
pytest-django
factory-boy
Final Thoughts
Don’t install everything. Start minimal, add as needed. But know what’s available—the Django ecosystem is mature and most problems have solved solutions.
Stand on the shoulders of giants. pip install wisely.