====== Preparing a Django project ======
===== Pipeline =====
poetry init
poetry add django
poetry run django-admin startproject {project} .
- fix directory generation -
touch README.md
- copy the .gitignore -
git init
git add -A
git commit -m "first commit"
git remote add origin {url}
git push -u origin master
- move settings to an inner package, renaming the file to 'default.py' -
- Add a develop.py file -
- In settings\__init__.py and in settings\develop.py add the line: from .default import * a
- Change BASE_DIR like this: BASE_DIR = Path(__file__).resolve().parent.parent.parent
- Add import os
- Change: ALLOWED_HOSTS = ['0.0.0.0']
poetry add whitenoise
- Configure whitenoise
- Add STATIC_ROOT = os.path.join(BASE_DIR, 'static')
poetry env list --full-path
- Change the config for running in that path: manage.py runserver 0.0.0.0:8000 --nostatic . Also add the DJANGO_SETTINGS_MODULE envvar as {project}.settings.develop
poetry add psycopg2-binary
poetry add gunicorn
mkdir docker
- Add the docker files
docker-compose up postgres12
docker exec -ti --user postgres postgres12 createdb {project}
- Change the database configuration:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': '{project name}',
'USER': 'postgres',
'PASSWORD': 'mysecretpassword',
'HOST': os.environ.get('DB_HOST', '127.0.0.1'),
'TEST': {
'NAME': '{project_name_test}',
}
}
}
ln -s ../daauth/daauth daauth
- Remove admin from urls.py and from settings -
- Add models.py, views.py and the package migrations. Also the apps.py. -
- Add to INSTALLED_APPS: daauth & {project}
- Add the next lines to settings/default.py:
AUTH_USER_MODEL = '{project}.User'
LOGIN_REDIRECT_URL = '/'
python manage.py migrate
mkddir -p static/styles/sass
touch static/styles/sass/main.scss static/styles/sass/stylesheet.scss
- Add @import "stylesheet"; to main.scss
sass --watch static/styles/sass/main.scss:static/styles/stylesheet.css
- Add to repository those last files
git commit
mkdir -p {project}/templates
touch {project}/templates/base.html
===== Concrete =====
==== .gitignore ====
*.pyc
.DS_Store
env
venv
.idea/**
node_modules
*.sqlite3
*.pyc
**/__pycache__/*
**/.sass-cache/*
**/.env
**/elm-stuff/**
strit/migrations/**
!strit/migrations/__init__.py
strit/settings/**
!strit/settings/default.py
!strit/settings/__init__.py
daauth
/daauth/
==== Whitenoise ====
* http://whitenoise.evans.io/en/stable/#quickstart-for-django-apps
==== app.Dockerfile ====
FROM python:3.9-alpine
ENV PYTHONUNBUFFERED 1
ARG http_proxy
ENV https_proxy=$http_proxy
ENV http_proxy=$http_proxy
ENV HTTP_PROXY=$http_proxy
ENV HTTPS_PROXY=$http_proxy
RUN apk update
RUN apk add --no-cache python3-dev libffi-dev postgresql-libs postgresql-dev build-base cairo cairo-dev pango pango-dev fontconfig ttf-dejavu ttf-freefont
RUN apk add --virtual build-deps gcc python3-dev musl-dev
RUN apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev py-pillow
RUN apk add git
RUN mkdir -p /srv/app
WORKDIR /srv
RUN pip install --upgrade pip
RUN pip install poetry
COPY pyproject.toml /srv/pyproject.toml
COPY poetry.lock /srv/poetry.lock
RUN poetry install
CMD poetry run gunicorn strit.wsgi --bind 0.0.0.0:8000
==== docker-compose.yml ====
version: "3.3"
services:
postgres12:
container_name: postgres12
image: postgres:12
volumes:
- /srv/data/pg12:/var/lib/postgresql/data/
environment:
- POSTGRES_PASSWORD=mysecretpassword
ports:
- 5432:5432
{project}:
build:
context: ..
dockerfile: docker/app.Dockerfile
ports:
- 8000:8000
container_name: {project}
depends_on:
- postgres12
environment:
- DB_HOST=postgres12
volumes:
- ..:/srv
command: poetry run gunicorn {project}.wsgi --bind 0.0.0.0:8000
==== apps.py ====
from django.apps import AppConfig
class {Project}Config(AppConfig):
name = '{project}'
==== models.py ====
from django.db import models
from daauth.models import BaseUser
class User(BaseUser):
class Meta:
db_table = "users"
==== base.html ====
* http://htmlshell.com/
{% load dutils %}
title
aaaaa