Django deploy налаштування

Поради як безпечно налаштувати сервер на продакшені

приховати SECRET_KEY

Можемо читати з .env, а можемо з окремого файлу (а також перед кожним запуском формувати новий)

Читати далі →

Python IDE – # noqa

Зустрів таку позначку

class Meta: # noqa

Виявилось, що це не просто комент. Відключає попередження IDE:

NOQA stands for NO Quality Assurance. What this typically means is that if you have any warning in your IDE, then if you add a comment as # noqa at the end of the line then the warning will be ignored by the IDE.

Ще документація 

 

 

 

Docker quickstart

Зберіг тут швидкий старт  по Docker

для Django – декілька команд швидкого запуску в Docker:

docker –version
sudo docker build -t <project_name> .
docker container ls
docker run -it -p 8000:8080 –name <project_name>
sudo docker exec -it <container_id> /bin/bash
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic

 

Wagtail – налаштування мови сайту

Ця тема добре розкрита в  документації 

Додати щось важко, важливо бути уважним. Тут будуть особливості.

Після налаштувань згідно з інструкцією автоматично обирає локаль в залежності від налаштувань браузера відвідувача.

Два варіанти перемикача (ставив в базовий шаблон)

перший – вказано тільки інші мови

{% if page %}
    {% for translation in page.get_translations.live %}
        {% get_language_info for translation.locale.language_code as lang %}
        <a href="{% pageurl translation %}" rel="alternate" hreflang="{{ language_code }}">
            {{ lang.name_local }}
        </a>
    {% endfor %}
{% endif %}

Другий – є усі локалі, налаштовані в settings/base.py

{% for language_code, language_name in LANGUAGES %}
    {% get_language_info for language_code as lang %}

    {% language language_code %}
        <a href="{% pageurl page.localized %}" rel="alternate" hreflang="{{ language_code }}">
            {{ lang.name_local }}
        </a>
    {% endlanguage %}
{% endfor %}

 

{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
<html class=”no-js” lang=”{{ LANGUAGE_CODE }}”>

 

 

 

Django записник

Розгортаємо (наприклад версія Python 3.9, тут для Windows):

python3.9 -m venv env
source env/bin/activate
python -m pip install –upgrade pip
pip install django АБО pip install git+https://github.com/django/django.git # (альтернатива встановлення з GIT )
pip install -r requirements.txt  # (якщо цей файл є )
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py createsuperuser --email admin@example.com --username admin
python manage.py runserver '0.0.0.0:8000'

PS:різновид встановлення Django  з GIT дозволяє встановити будь-який допрацьований проєкт (не обов’язково базований на Django, але тут про нього)

Про SECRET_KEY

створити:

import secrets
print(secrets.token_hex(32))

для завантаження з файлу:

pip install python-dotenv

контент .env файлу

SECRET_KEY=your_secret_key_here

фрагмент коду:

import os
from dotenv import load_dotenv

load_dotenv()

SECRET_KEY = os.getenv('SECRET_KEY')

Для того, щоб не розповсюджувати секретну інформацію (наприклад на github) треба додати до виключень файл “.env” у “.gitignore”.

 

 

 

 

Wagtail записник

Розгортаємо:
python3.9 -m venv env
pip install wagtail
wagtail start mysite .
pip install -r requirements.txt
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

все схоже як у Django

pagination

не оптимально, але для старту ок
https://learnwagtail.com/tutorials/how-to-paginate-your-wagtail-pages/

Django model підказки

Для Foreign – поля обов’язково використовувати on_delete=models.опція є такі ключі:

CASCADE: When the referenced object is deleted, also delete the objects that have references to it (when you remove a blog post for instance, you might want to delete comments as well). SQL equivalent: CASCADE.
PROTECT: Forbid the deletion of the referenced object. To delete it you will have to delete all objects that reference it manually. SQL equivalent: RESTRICT.
RESTRICT: (introduced in Django 3.1) Similar behavior as PROTECT that matches SQL’s RESTRICT more accurately. (See django documentation example)
SET_NULL: Set the reference to NULL (requires the field to be nullable). For instance, when you delete a User, you might want to keep the comments he posted on blog posts, but say it was posted by an anonymous (or deleted) user. SQL equivalent: SET NULL.
SET_DEFAULT: Set the default value. SQL equivalent: SET DEFAULT.
SET(…): Set a given value. This one is not part of the SQL standard and is entirely handled by Django.
DO_NOTHING: Probably a very bad idea since this would create integrity issues in your database (referencing an object that actually doesn’t exist). SQL equivalent: NO ACTION. (2)