Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
wiki2:python:django:project [2020/12/25 09:14] alfred [Preparing a Django project] |
wiki2:python:django:project [2021/02/08 18:45] (actual) |
||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== Preparing a Django project ====== | ====== Preparing a Django project ====== | ||
| + | ===== Pipeline ===== | ||
| Línea 8: | Línea 9: | ||
| poetry add django | poetry add django | ||
| - | poetry run django-admin startproject {project} | + | poetry run django-admin startproject {project} . |
| - fix directory generation - | - fix directory generation - | ||
| Línea 32: | Línea 33: | ||
| - In settings\__init__.py and in settings\develop.py add the line: from .default import * a | - 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 | + | - 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 | 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 | ||
| + | |||
| + | |||
| + | |||
| </code> | </code> | ||
| - | ===== Files ===== | + | ===== Concrete ===== |
| ==== .gitignore ==== | ==== .gitignore ==== | ||
| Línea 69: | Línea 142: | ||
| </code> | </code> | ||
| + | ==== Whitenoise ==== | ||
| + | |||
| + | * http://whitenoise.evans.io/en/stable/#quickstart-for-django-apps | ||
| + | |||
| + | ==== app.Dockerfile ==== | ||
| + | |||
| + | <code> | ||
| + | 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 | ||
| + | </code> | ||
| + | |||
| + | ==== docker-compose.yml ==== | ||
| + | <code> | ||
| + | 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 | ||
| + | </code> | ||
| + | |||
| + | ==== apps.py ==== | ||
| + | <code> | ||
| + | from django.apps import AppConfig | ||
| + | |||
| + | |||
| + | class {Project}Config(AppConfig): | ||
| + | name = '{project}' | ||
| + | </code> | ||
| + | |||
| + | ==== models.py ==== | ||
| + | <code> | ||
| + | from django.db import models | ||
| + | from daauth.models import BaseUser | ||
| + | |||
| + | |||
| + | class User(BaseUser): | ||
| + | class Meta: | ||
| + | db_table = "users" | ||
| + | </code> | ||
| + | |||
| + | ==== base.html ==== | ||
| + | |||
| + | * http://htmlshell.com/ | ||
| + | |||
| + | <code> | ||
| + | <!DOCTYPE html> | ||
| + | <!--[if lte IE 6]><html class="preIE7 preIE8 preIE9"><![endif]--> | ||
| + | <!--[if IE 7]><html class="preIE8 preIE9"><![endif]--> | ||
| + | <!--[if IE 8]><html class="preIE9"><![endif]--> | ||
| + | <!--[if gte IE 9]><!--><html><!--<![endif]--> | ||
| + | {% load dutils %} | ||
| + | <head> | ||
| + | <meta charset="UTF-8"> | ||
| + | <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | ||
| + | <meta name="viewport" content="width=device-width,initial-scale=1"> | ||
| + | <title>title</title> | ||
| + | <meta name="author" content="name"> | ||
| + | <meta name="description" content="description here"> | ||
| + | <meta name="keywords" content="keywords,here"> | ||
| + | <link rel="stylesheet" href="{% dstatic 'styles/stylesheet.css' %}" type="text/css"> | ||
| + | </head> | ||
| + | <body> | ||
| + | aaaaa | ||
| + | </body> | ||
| + | </html> | ||
| + | </code> | ||