Essential Django Packages for 2020

python backend django

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:

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:

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:

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.

All posts