Skip to content

lincolnloop/django-layout

Repository files navigation

{% comment %}

Django Layout

django-layout provides sane defaults for new Django projects based on established best practices and some configuration setups frequently used in Lincoln Loop's projects, like using pip-tools for dependency locking, using pyproject.toml.

To use django-layout:

  1. create and activate a virtualenv:

     python -m venv --prompt . --upgrade-deps .venv
    
  2. install Django with pip install django

  3. run the following command (replace YOUR_PROJECT_NAME with your preferred name):

     django-admin startproject \
      --template=https://github.com/lincolnloop/django-layout/zipball/main \
      --extension=py,md,gitignore,yml,json \
      --name=Makefile,Dockerfile \
      --exclude=.github \
      YOUR_PROJECT_NAME
    

Development

To update README.md after making changes to the config, run:

find . -type f -name "*.py" -or -name Makefile -or -name README.md | xargs sed -i '' 's/{{ project_name }}/project_name/g'
docker compose run --rm --no-deps app make README.md

Then use git add -p README.md to only commit the changes you want. You can git stash the template changes after your commit.

Note: The text following this comment block will become the README.md of the new project.


{% endcomment %}

{{ project_name }}

Docker Installation

Build and run the project:

docker compose up --build

To run Django commands like migrations and shell or to enter the container bash do:

docker compose run --rm app bash
docker compose run --rm app manage.py createsuperuser
docker compose run --rm app manage.py migrate
docker compose run --rm app manage.py shell

To stop containers run:

docker compose down

To update a container after adding a new requirement for example:

docker compose build

Running the project

Docker

Create super user:

docker compose run --rm app manage.py createsuperuser

Make sure you have the containers running:

docker compose up

Access [localhost:8000/{{ project_name }}/admin/](http://localhost:8000/{{ project_name }}/admin/).

Configuration / Environment Variables

  • DEBUG
    • type: bool
    • default: False
  • ALLOWED_HOSTS
  • DATABASE_URL
  • DJANGO_ENV
    • description: Toggle deployment settings for local development or production
    • type: Literal['development', 'dev', 'production']
    • default: production
  • LOG_LEVEL
    • description: Python logging level
    • type: Literal['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
    • default: INFO
  • SECRET_KEY REQUIRED
  • ENVIRONMENT
    • description: Name of deployed environment (e.g. 'staging', 'production')
    • type: str
    • default: development
  • BASIC_AUTH_CREDENTIALS
    • description: Basic Auth credentials for the site in the format 'username:password'
    • type: str
    • default: ``
  • SENTRY_DSN
    • description: Sentry DSN to enable error logging
    • type: str
    • default: ``
  • SENTRY_TRACE_SAMPLE_RATE

Makefile commands

Available make commands:

README.md                 Update dynamic blocks in README.md
fix                       Fix linting errors
fmt                       Format Python code
lint                      Lint Python code
requirements.txt          Generate requirements.txt (and requirements-dev.txt) from pyproject.toml
test                      Run tests
upgrade-requirements      Upgrade all dependencies in requirements.txt and requirements-dev.txt