Quick answer
From local Django project to live URL.
Install requirements, run python manage.py check, configure allowed generated hosts, and collect static files through a production static setup such as WhiteNoise. ZIP requirements.txt, manage.py, project/apps, and reviewed static output while excluding virtual environments, secrets, caches, and SQLite.
What the Free plan includes.
Sitedropper Free is a $0 plan for a small real deployment workflow. The dashboard is the source of truth for the current ZIP limit shown beside Choose ZIP.
- Up to 3 projects
- 30 deployments per month
- Draft, Password protected, and Public sharing
- Sitedropper URL
Before you build.
Run Django’s system checks and tests before packaging. For static assets with DEBUG disabled, configure a production static path such as WhiteNoise, run collectstatic locally, and include the resulting reviewed directory when the deployment build does not run collectstatic for you.
- Django declared in requirements.txt.
- manage.py at the ZIP root.
- ALLOWED_HOSTS configured for the generated apps.sitedropper.com hostname pattern.
- A deliberate static-file setup and no dependency on local SQLite.
Build and check Django locally.
Run these commands from the project root. Finish the local check before creating the archive so the deployment is not the first place a dependency, compile, or startup error appears.
The final server command stays running. Open the local URL in another terminal or browser, complete the checks, then stop it with Ctrl+C.
macOS
Check Django on macOS
Create a disposable virtual environment in Terminal, install the exact requirements, run the framework check, and start the same entry point you plan to upload.
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python manage.py check
python manage.py test
python manage.py collectstatic --noinput
python manage.py runserver 127.0.0.1:8000Windows
Check Django in PowerShell
Create a disposable virtual environment in PowerShell, install the exact requirements, run the framework check, and start the same entry point you plan to upload.
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python manage.py check
python manage.py test
python manage.py collectstatic --noinput
python manage.py runserver 127.0.0.1:8000Linux
Check Django on Linux
Create a disposable virtual environment in a terminal, install the exact requirements, run the framework check, and start the same entry point you plan to upload.
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python manage.py check
python manage.py test
python manage.py collectstatic --noinput
python manage.py runserver 127.0.0.1:8000Use one dependency workflow: keep the lockfile that matches the selected package manager and do not mix install commands.
Create the ZIP on your operating system.
Package reviewed source and build metadata; use the exclusions to keep local-only files out. The Windows and macOS recipes include graphical menu guidance, while the commands remain the precise archive contract.
No command line required
Directly create the ZIP in your file system.
First create and inspect a clean staging folder containing only the required source, manifest, configuration, and entry-point files. In Windows File Explorer, right-click the reviewed selection and choose Compress to → ZIP File. On macOS, Control-click the reviewed selection and choose Compress Items.

Open the resulting archive before upload. If an outer folder wraps the expected files, recreate the ZIP by selecting the folder’s contents instead.
Or create and inspect the ZIP from the command line.
macOS
Compress the reviewed source in Terminal
The exclusions keep common dependencies, caches, local data, and secrets out. Finder users must first make and inspect an equivalent clean staging folder, then select its contents, Control-click, and choose Compress Items—not compress the raw project folder.
- Run from the project root.
- Inspect project-specific local files before upload.
- Confirm the manifest, lockfile or requirements, source, and entry point are present.
if [ -e site.zip ]; then echo "site.zip already exists. Move or rename it before continuing." >&2; exit 1; fi
zip -qr site.zip . -x ".venv/*" "venv/*" "node_modules/*" ".git/*" ".next/*" "dist/*" "build/*" ".cache/*" ".turbo/*" "__pycache__/*" "*/__pycache__/*" "*.py[cod]" ".pytest_cache/*" ".mypy_cache/*" ".env" ".env.*" "*/.env" "*/.env.*" ".npmrc" "*/.npmrc" "*.sqlite" "*.sqlite3" "db.sqlite3" "*.log" ".DS_Store" "*/.DS_Store" "site.zip" ".sitedropper-package/*"
unzip -l site.zip | head -60Windows
Stage and compress the source in PowerShell
A clean staging folder prevents dependencies, caches, local databases, and secrets from entering the ZIP. For File Explorer, stop after robocopy, inspect the staging contents, select them, right-click, and choose Compress to → ZIP File; never compress the unreviewed project folder.
- Run from the folder containing the manifest or requirements.txt.
- Review the staging folder created beside the project before upload.
- The command intentionally leaves the staging folder in place and never deletes it automatically.
$ProjectRoot = (Resolve-Path .).Path
$ProjectName = Split-Path $ProjectRoot -Leaf
$Stage = Join-Path (Split-Path $ProjectRoot -Parent) "$ProjectName-sitedropper-package"
if (Test-Path $Stage) { throw "$Stage already exists. Move or rename it before continuing." }
if (Test-Path .\site.zip) { throw "site.zip already exists. Move or rename it before continuing." }
robocopy $ProjectRoot $Stage /E /XD .venv venv node_modules .git .next dist build .cache .turbo __pycache__ .pytest_cache .mypy_cache .sitedropper-package /XF .env .env.* .npmrc site.zip *.pyc *.pyo *.sqlite *.sqlite3 db.sqlite3 *.log
if ($LASTEXITCODE -ge 8) { throw "robocopy failed with exit code $LASTEXITCODE" }
Add-Type -AssemblyName System.IO.Compression.FileSystem
$Archive = Join-Path $ProjectRoot "site.zip"
[System.IO.Compression.ZipFile]::CreateFromDirectory($Stage, $Archive)
tar.exe -tf .\site.zipLinux
Compress the reviewed source in a Linux terminal
The exclusions keep common dependencies, caches, local data, and secrets out. Install your distribution’s zip package first if needed.
- Run from the project root.
- Inspect project-specific local files before upload.
- Confirm the manifest, lockfile or requirements, source, and entry point are present.
if [ -e site.zip ]; then echo "site.zip already exists. Move or rename it before continuing." >&2; exit 1; fi
zip -qr site.zip . -x ".venv/*" "venv/*" "node_modules/*" ".git/*" ".next/*" "dist/*" "build/*" ".cache/*" ".turbo/*" "__pycache__/*" "*/__pycache__/*" "*.py[cod]" ".pytest_cache/*" ".mypy_cache/*" ".env" ".env.*" "*/.env" "*/.env.*" ".npmrc" "*/.npmrc" "*.sqlite" "*.sqlite3" "db.sqlite3" "*.log" ".DS_Store" "*/.DS_Store" "site.zip" ".sitedropper-package/*"
unzip -l site.zip | head -60Inspect before upload: compare the ZIP listing with the archive tree below and remove dependencies, caches, local data, and secrets.
Check the archive root.
Exclude db.sqlite3 and every local database file. Keep the settings, application source, templates, and static output required by the selected production-static configuration.
site.zip
├── requirements.txt
├── manage.py
├── project_package/
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── application packages/
└── staticfiles/ (when collected for the chosen setup)Upload the Django ZIP to Sitedropper.
Create a Draft project, upload site.zip, follow the deployment, and open the generated URL only after the progress reaches Ready.
The dashboard screenshots use fictional project and account data. Yellow outlines identify the documented controls.
- 01
Create a project
Open Projects, choose New project, enter a name, and select the highlighted Create project action. New projects begin as Draft.

Create a project in the current Sitedropper dashboard. Select the image to enlarge it. - 02
Upload the ZIP
Open the project’s Upload and deploy card, then select the highlighted Choose ZIP control or drop the archive into the same area.

Upload the ZIP in the current Sitedropper dashboard. Select the image to enlarge it. - 03
Open the deployed site
Wait for Analyze, Build, and Deploy to finish. Then use the highlighted Open Sitedropper site action to review the generated URL.

Open the deployed site in the current Sitedropper dashboard. Select the image to enlarge it.
Check the Django result.
Use the deployed URL like a visitor rather than relying only on the successful status.
- Open the home route using the generated hostname and confirm ALLOWED_HOSTS accepts it.
- Load CSS, JavaScript, and images with DEBUG disabled in the local production check.
- Submit a CSRF-protected form only after its trusted HTTPS origin pattern is configured.
- Exercise only routes that do not require an unavailable local database.
Update Sitedropper Project settings.
Project settings are separate from framework configuration. Update the project name or description, keep Draft while reviewing, then choose Password protected or Public only when that matches the intended audience. Free does not include Private sharing by email, URL customization, or custom domains.
The dashboard screenshots use fictional project and account data. In the first settings image, the existing yellow outline marks Open site; the Project settings card is visible below and is identified by the instructions.
- 01
Review Project settings
The Project settings card is below the project header. Update the name or description, review the generated URL, and keep the first deployment Draft while you test it.

Review Project settings in the current Sitedropper dashboard. Select the image to enlarge it. - 02
Choose who can open the site
Open Visibility. Free includes Draft, Password protected, and Public. Select Public only when anonymous access is intentional, then close the menu and choose Save changes.

Choose who can open the site in the current Sitedropper dashboard. Select the image to enlarge it.
Finish the change: close the visibility menu, select Save changes, and wait for the “Changes saved” confirmation before leaving the page.
Troubleshoot this Django deployment.
- DisallowedHost appears
- Add an intentional apps.sitedropper.com host pattern to ALLOWED_HOSTS; do not disable host validation blindly.
- Admin or forms fail CSRF checks
- Configure the generated HTTPS origin pattern in CSRF_TRUSTED_ORIGINS and retest before upload.
- Static files return 404
- Configure the chosen production static middleware/storage, run collectstatic, and include the output expected by that configuration.
- The project opens db.sqlite3
- SQLite/local persistent databases are unsupported. This walkthrough is limited to stateless routes or a separately compatible external service.
- Migrations are required at startup
- The dashboard ZIP workflow does not provide a managed migration/database workflow. Do not publish until the application’s external data lifecycle is handled safely.
Know the Free-plan boundaries.
- No managed application database or durable SQLite storage is included.
- The ZIP deployment does not run a separate migration release step.
- Background jobs, cron, and persistent local media are outside this workflow.
- Use this guide for a stateless representative app unless external services are already handled safely.
The generated Sitedropper URL remains available on Free. Check the dashboard for current usage and upload limits before starting another deployment.
Django deployment FAQ.
Can I deploy Django with SQLite on Sitedropper Free?
No. SQLite and other local persistent application databases are not supported by this stateless ZIP workflow.
Why do I need ALLOWED_HOSTS changes?
Django validates the incoming hostname. Configure the generated apps.sitedropper.com pattern intentionally before deployment.
How are Django static files served?
Use a production static setup such as WhiteNoise, run collectstatic as documented, and verify the resulting files with DEBUG disabled before creating the ZIP.