Django

What a Django build hands your own staff on day one

The short answer

Django is a free, open-source Python framework that arrives with the parts most web applications need already built: a database layer, an accounts and permissions system, security defaults, and an admin interface generated from your data. It suits content-heavy and record-heavy applications. It's opinionated, and disagreeing with it is expensive.

You're holding a quote with Django on it and nothing says what that buys you. It's a Python framework, and the useful part isn't the language. It's how much of the application already exists before anyone opens an editor.

A Python framework that arrives with the decisions already made

Django is free, open-source software a team builds on, not a product anybody buys a licence for. It's written in Python, and the phrase its own community uses is batteries included: it ships with the parts almost every web application needs, rather than leaving a team to pick them one at a time.

That list is longer than it sounds. A way to describe your records in Python and have the database tables follow. Accounts, passwords, groups and permissions. Forms and validation. Security defaults that are on before anyone has thought about security. And an administration interface, generated from that same description, which your own staff sign into and use.

You still pay for hosting, a database and the people who write the rest. What you don't pay for is a team spending its first month choosing between four ways to do each of those things.

  1. 01

    Describe the records

    One short Python file names what the application holds, a booking, a case, a listing, and what each blank on it is. Said once.

  2. 02

    Run the migration

    Django writes the database tables to match, and keeps a numbered history of every change so the next person can replay it exactly.

  3. 03

    The admin appears

    Screens to add, edit, search and filter those records, generated from the same file. Nobody designed them and nobody quoted them.

  4. 04

    Attach the people

    The built-in accounts and permissions decide who signs in, who sees which records, and who is allowed to change them.

How one description of your records turns into database tables, working admin screens and a permission model, without those three things being built separately.

It behaves this way because it was written in a newsroom

Django came out of a newspaper. It was built at the Lawrence Journal-World in Kansas, where a small web team produced new sections of the site on newsroom deadlines, and it was released publicly in 2005.

That origin explains most of how it behaves. When the same handful of people build a staff directory, then an election results section, then a database of local restaurants, the repeated part gets obvious fast: describe the records, get screens for editing them, decide who's allowed in, publish. Django is that pattern factored out and given away.

It's looked after now by the Django Software Foundation, a non-profit, with a published release schedule and a security process. Nobody can change the terms underneath you, because there's no vendor in the arrangement. It's named after the guitarist Django Reinhardt, and the D is silent.

The generated admin is why a lot of teams pick it

This is the part that decides more Django builds than anything technical does. Register your records with the admin and Django produces working screens: lists with search and filters, forms to add and edit, a log of who changed what, and permissions set per type of record.

So on the day the first version goes live, somebody who has never opened a terminal can sign in and manage the data. For internal tools and back-office systems that's weeks of work nobody had to quote for.

There's a limit, and Django's own documentation is blunt about it: the admin is meant for trusted people inside your organisation, not as the interface you build a product around. It's shaped like a filing cabinet, because that's what it's for. If the plan is for customers to use it, somebody is building a real interface anyway, and that build hasn't been quoted.

Where it stops: it has opinions, and arguing costs more than agreeing

Django decides how a project is laid out, how records are described, how a request is handled and how the pieces talk to each other. Accept those decisions and work moves quickly, including the work of whoever you hire next, because one Django project looks like every other one.

Go against them and you pay twice. Once to build the exception, and again every time the framework updates and somebody checks it still holds. The teams that struggle with Django usually aren't doing something hard. They're doing something ordinary in an unusual way. Rails and Laravel make the same bargain in other languages, so if your proposal names one of those instead, the questions here still apply.

Two other ceilings are worth knowing before a quote surprises you. Django grew up handling one request at a time. It has since added support for the newer continuous style, but plenty of the packages around it still assume the older one. So anything live, chat, presence, a screen that updates while you watch, is separate machinery alongside Django rather than something the framework does itself.

And it doesn't draw your front end. Django renders pages well enough by itself, which is fine for anything that behaves like a website. If the product has to feel like an application, that's a second body of work in a browser framework, talking to Django across a boundary somebody maintains.

Django

A minimal framework

The first weeks

Django: Most of the application already exists. You take how it works.

A minimal framework: Nothing exists. Every part is a choice, and each choice is now yours to defend.

Admin screens

Django: Generated from your records, in the shape Django picked. Free, and it looks it.

A minimal framework: None arrive. Built to fit what you asked for, on your budget and your timeline.

An unusual requirement

Django: Cheap inside the pattern. Expensive, and permanently expensive, outside it.

A minimal framework: No pattern to fight. No pattern to lean on either, so the odd case and the ordinary one cost the same.

Keeping it current

Django: One framework to track, on a schedule somebody else sets and you don't get a vote on.

A minimal framework: A dozen separate parts to track, on a dozen schedules, and nobody publishes the combination.

Handing it on

Django: A new developer recognises the layout, and inherits the constraints with it.

A minimal framework: A new developer learns your particular arrangement first, then works without limits.

Five things Django decides for you and a minimal framework leaves open, with what the choice costs you on each side.

Who has to be around afterwards

Django needs Python developers, which is a large and ordinary labour market. You can hire, put the same job to three firms, and replace one when a relationship ends. Two years in, that matters more than any feature comparison did at the start.

It also needs somewhere to run: a server, a database, and somebody keeping both current. Django designates some releases as long-term support and keeps patching those for years after the next one lands, so the upgrade is something you put in a calendar rather than discover. Somebody still has to put it there.

Because your own staff manage the records, the day-to-day stops queuing behind a developer. You need one for changes to how the thing works, not for changes to what's in it. That's a real difference in what year two asks of you.

Worth knowing before you start

  • Ask whoever is quoting which screens are the generated admin and which are being designed and built. The two cost wildly different amounts, and in a demo the admin looks like a finished product to anyone who hasn't seen one before.

  • Ask which Django version the project starts on, and whether it's a long-term support release. That buys you time before the upgrade conversation, and it costs nothing to ask for now and real money to arrange later.

  • Ask whoever holds the code to run Django's built-in deployment check and show you the output. It reports on the security settings the framework expects in production, and a project that fails it tells you how carefully the parts you can't see were treated.

  • Get the database backups and the code repository into accounts your own company owns before the last invoice is settled. Django gives nobody a way to lock you in, which only helps if both are in your name.

Common questions

The framework is, under an open-source licence, and there's no vendor who can raise it. Hosting, a database and the people who build and maintain it are not. The bill is real. It just isn't a licence.

Python is the language. Django is one of several frameworks written in it, and the one that decides the most on your behalf. So the word tells you the language and a good deal about how the application will be organised.

Not for managing records. The generated admin is built for people who aren't technical, and permissions can be set so each person only sees what they should. For changes to how it behaves, for updates, and for the morning something breaks, somebody technical has to be reachable. That's an arrangement, not necessarily a hire.

No, but it's a poor fit for the smallest ones. A brochure site doesn't need an accounts system, and one small interface for another system to talk to is quicker with something lighter. Django starts paying for itself when there are records with rules attached and people with different permissions over them.

Get the specific case on the table before the build starts, not after. Most disagreements turn out to be habit rather than requirement, and dropping those costs nothing. The ones that are real requirements are worth pricing separately, because they get paid for again at every upgrade.

Not in the way it's usually meant. Instagram has talked publicly for years about running its web tier on Django, at a size nobody reading this is planning for. What limits an application under load is the database and how the code queries it, and that's the same conversation on any framework.

Related

Want to talk through your situation?

A short call is usually enough to tell whether this is the right work for you. If it isn’t, we’ll say so.