Django Framework - A short-list with popular extensions

Hello Coders,

This article presents a short-list with popular Django modules and apps that might help Python programmers to code faster new features by reusing some valuable work provided by open-source enthusiasts.

The list is built based on my personal experience and suggestions published by developers across relevant communities: Dev.to Pythoners / Django, Reddit Django and Python channels (both super cool and supportive) and the classic Python Forum.


What is Django (web framework)

Short-Note for beginners - Django is an open-source web application framework written in Python. A framework means a collection of modules and helpers that make development easier. They are logically grouped together and allow you to create web applications by reusing stuff, instead of writing all from scratch.

Useful Django Resources:

  • Django - official website and docs
  • Django - related content provided by the (popular) Full-Stack-Python platform

The Short-List


Django Extensions

This is an open-source collection of custom extensions used for Django projects, released under the MIT license.

How to use it

$ pip install django-extensions

And later, enable the extensions in Django configuration:

INSTALLED_APPS = (
    ...
    'django_extensions',
    ...
)

Call the magic, via manage.py master script:

$ # Generate (and view) a graphviz graph of app models:
$ python manage.py graph_models -a -o myapp_models.png
$
$ # Check templates for rendering errors:
$ python manage.py validate_templates
$
$ # Run the enhanced django shell:
$ python manage.py shell_plus

Django REST framework

Django REST framework is a powerful and flexible toolkit for building Web APIs with an impressive features set:

Django REST Links:


Django Debug Toolbar

The Django Debug Toolbar is a configurable set of panels that display various debug information about the current request/response and when clicked, display more details about the panel's content.

Django Extension Debug Toolbar - Screen Shot.


Django CORS Headers

A Django App that adds Cross-Origin Resource Sharing (CORS) headers to responses. This allows in-browser requests to your Django application from other origins.

How to use it

$ pip install django-cors-headers

Add the extension in Django configuration:

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]

You will also need to add a middleware class to listen in on responses:

MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

Django reCaptcha v3

This integration app implements a recaptcha field for Google reCaptcha v3.

How to use it

$ pip install django-recaptcha3

Then add django-recaptcha3 to your installed apps:

INSTALLED_APPS = (
    ...
    'snowpenguin.django.recaptcha3',
    ...
)

Update settings.py with reCaptcha private and public key:

RECAPTCHA_PRIVATE_KEY = 'your private key'
RECAPTCHA_PUBLIC_KEY = 'your public key'

Usage in Forms

from snowpenguin.django.recaptcha3.fields import ReCaptchaField

class ExampleForm(forms.Form):
    [...]
    captcha = ReCaptchaField()
    [...]

Django REST Swagger

Swagger/OpenAPI Documentation Generator for Django REST Framework.

How to use it

$ pip install django-rest-swagger

Update the settings.py to enable the app:

INSTALLED_APPS = [
    ...
    'rest_framework_swagger',
    ...
]

For a complete sample, please access the official docs and starter sample tutorial.


Django-environ

Django-environ allows you to use Twelve-factor methodology to configure your Django application with environment variables.

How to use it

$ pip install django-environ

Create an .env file in the root of the project (sample below):

DEBUG=on
SECRET_KEY=your-secret-key
DATABASE_URL=psql://urser:un-githubbedpassword@127.0.0.1:8458/database
SQLITE_URL=sqlite:///my-local-sqlite.db

Usage in Django Application (No need to add it to INSTALLED_APPS)


import environ
env = environ.Env(
    # set casting, default value
    DEBUG=(bool, False)
)
# reading .env file
environ.Env.read_env()

# False if not in os.environ
DEBUG = env('DEBUG')

# Raises django's ImproperlyConfigured exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')

# Parse database connection url strings like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
    # read os.environ['DATABASE_URL'] and raises ImproperlyConfigured exception if not found
    'default': env.db(),
    # read os.environ['SQLITE_URL']
    'extra': env.db('SQLITE_URL', default='sqlite:////tmp/my-tmp-sqlite.db')
}
Show Comments

Get the latest posts delivered right to your inbox.