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

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
    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 start 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 counter.py convert 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.start()

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

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

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

pip install nanodjango
python script.py

Run in production

Run it in production using a WSGI server:

gunicorn -w 4 counter:app

or if you have async views, use an ASGI server:

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.8.1.tar.gz (26.5 kB view details)

Uploaded Source

Built Distribution

nanodjango-0.8.1-py3-none-any.whl (29.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: nanodjango-0.8.1.tar.gz
  • Upload date:
  • Size: 26.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for nanodjango-0.8.1.tar.gz
Algorithm Hash digest
SHA256 fa0b1fc63061987a0056152dbd68505aea5ec63cc5792f8b9e1c0b0507d5db5a
MD5 f4865cd0bd193ea7e9e2b3a303db02ec
BLAKE2b-256 4605b6656e6f63de0fa12ec44e8061f280ca2ba083ec21643f478eff108ff844

See more details on using hashes here.

File details

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

File metadata

  • Download URL: nanodjango-0.8.1-py3-none-any.whl
  • Upload date:
  • Size: 29.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for nanodjango-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a526761fd98864b5a4caa67410b773a6b293e85a6a325a4bfb763aec88e79657
MD5 5f0ce93ecde2b49ea724fd8f9200b722
BLAKE2b-256 3ec8a1dfc66c0ac547836cb285d64239e75010e090dd73449ac00e9e9d983b6a

See more details on using hashes here.

Supported by

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