====== 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