Skip to main content

Run Django models and views from a single file, and convert it to a full project.

Project description

nanodjango

PyPI Documentation Tests Coverage

  • Write a Django site in a single file, using views, models and admin
  • Run it locally or in production, or share it as a standalone script
  • Automatically convert it to a full Django project when you're ready for it to grow
  • Try it out in your browser at the nanodjango playground

Head to nanodjango.dev to get a high level overview of what nanodjango can do, or you may like to watch a lighting talk.

Quickstart

Install nanodjango:

pip install nanodjango

Write your app in single .py file - for example:

from django.db import models
from nanodjango import Django

app = Django()

@app.admin
class CountLog(models.Model):
    # Standard Django model, registered with the admin site
    timestamp = models.DateTimeField(auto_now_add=True)

@app.route("/")
def count(request):
    # Standard Django function view, or class-based view
    CountLog.objects.create()
    return f"<p>Number of page loads: {CountLog.objects.count()}</p>"

@app.api.get("/add")
def add(request):
    # Django Ninja API support built in
    CountLog.objects.create()
    return {"count": CountLog.objects.count()}

@app.route("/slow/")
async def slow(request):
    import asyncio
    await asyncio.sleep(10)
    return "Async views supported"

Save that as counter.py, then set it up and run it:

nanodjango run counter.py

This will create migrations and a database, and run your project in development mode.

Convert it to a full site

If your project outgrows its single file, you can convert it into a full Django site:

nanodjango convert counter.py path/to/site --name=counter

Share an app

Nanodjango apps are great for sharing examples and prototypes.

Add inline script metadata at the top with your dependencies:

# /// script
# dependencies = ["nanodjango"]
# ///

and call app.run() at the bottom:

if __name__ == "__main__":
    app.run()

Now your app can be run without installing anything, using uv or pipx:

# Run with uv
uv run ./script.py
# or with pipx
pipx run ./script.py

You can still manually install dependencies and run the script directly with Python:

pip install nanodjango
python script.py

Run management commands

Anything you would normally do with manage.py you can do with nanodjango manage:

nanodjango manage script.py check
nanodjango manage script.py makemigrations script
nanodjango manage script.py runserver 0.0.0.0:8000

Run in production

To run nanodjango with production defaults, use nanodjango serve:

nanodjango serve counter.py

This will use gunicorn, or uvicorn if you have async views. It will also turn off settings.DEBUG, and will not serve media files.

Alternatively, you can pass the app directly to a WSGI or ASGI server if you prefer:

gunicorn -w 4 counter:app
uvicorn counter:app

Further reading

For more details, see

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nanodjango-0.15.0.tar.gz (56.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nanodjango-0.15.0-py3-none-any.whl (51.3 kB view details)

Uploaded Python 3

File details

Details for the file nanodjango-0.15.0.tar.gz.

File metadata

  • Download URL: nanodjango-0.15.0.tar.gz
  • Upload date:
  • Size: 56.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for nanodjango-0.15.0.tar.gz
Algorithm Hash digest
SHA256 68fe67fa84827d6ba8c097c44d20c2efd8da5ec34ceb9ff7f94415f1723eb97f
MD5 8c48d659bcdf91f81d7f98bffacbae4d
BLAKE2b-256 417b2fed53f577eb8fca8779705c27c0da09510701adc763cba4360ead1d6711

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanodjango-0.15.0.tar.gz:

Publisher: pypi.yml on radiac/nanodjango

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nanodjango-0.15.0-py3-none-any.whl.

File metadata

  • Download URL: nanodjango-0.15.0-py3-none-any.whl
  • Upload date:
  • Size: 51.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for nanodjango-0.15.0-py3-none-any.whl
Algorithm Hash digest
SHA256 db333ffa46d914a25bb923b1e99b7d6847ad73e04088e919ad95508b47cde6cd
MD5 c5f8dd3e9e3376a3af4d362d53a3f811
BLAKE2b-256 2142f25680e07c48d40be28f5384cff94faf685fa9c3a77315d65feaa638e1cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanodjango-0.15.0-py3-none-any.whl:

Publisher: pypi.yml on radiac/nanodjango

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page