When I start a new Django project I can never remember what are the steps to arrive at a functional boilerplate with one Django app, the simplest view to get started, and all dependencies set.
This is a documentation of this process.
Preparation
We assume our project’s name is earth
.
We assume we have these installed:
- bash
- git
- python3
Setup project
mkdir earth && cd earth git init python3 -m venv venv source venv/bin/activate
Create requirements.in
cat << EOF > requirements.in django EOF
Create requirements_dev.txt
cat << EOF > requirements_dev.txt pip-tools ipdb ipython isort flake8 black coverage EOF
Create Makefile
cat << EOF > Makefile .PHONY: format lint cov lint: flake8 --exclude=.git/,venv/ --ignore=E203,E501,W503 isort --check-only --profile black . black --check --exclude '/(\.git|venv)/' . format: black --exclude '/(\.git|venv)/' . isort --profile black . cov: coverage run --source='.' --omit 'venv/*' manage.py test coverage report -m EOF
Setup dependencies
pip install -r requirements_dev.txt pip install --upgrade pip pip-compile pip install -r requirements.txt
Start django project
django-admin startproject earth . django-admin startapp main
Reformat based on black
make format
Create .gitignore
cat << EOF > .gitignore *.pyc venv/ EOF
Initial commit
git add . git commit -m "init django project"
Create main/views.py
cat << EOF > main/views.py from django.http import HttpResponse def index(request): return HttpResponse("ok") EOF
Create main/urls.py
cat << EOF > main/urls.py from django.urls import path from main import views urlpatterns = [ path("", views.index, name="index"), ] EOF
Edit earth/urls.py
Add the include
import:
from django.urls import path, include
And the index path to include all main app urls:
path("", include("main.urls")),
Edit earth/settings.py
import os
SECRET_KEY = os.environ.get("SECRET_KEY", "nonrandom_secret")
DEBUG = True if os.environ.get("NODEBUG") is None else False
ALLOWED_HOSTS = [ "localhost", "127.0.0.1", ]
INSTALLED_APPS = [ "main.apps.MainConfig", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", ]
STATIC_URL = "/static/" STATIC_ROOT = os.path.join(BASE_DIR, "static")
Migrate and run
python manage.py migrate python manage.py runserver