Поради як безпечно налаштувати сервер на продакшені
приховати SECRET_KEY
Можемо читати з .env, а можемо з окремого файлу (а також перед кожним запуском формувати новий)
Якщо працює – залиш це тут!
Можемо читати з .env, а можемо з окремого файлу (а також перед кожним запуском формувати новий)
Приклади коду шаблону, щоб не забути, (css – bootstrap 5)
Черга
Подивитись повідомлення, що стоять в черзі на відправку:
exim -bp
порахувати скільки разів зустрічається слово
grep -o -i user@example.com /var/log/exim4/mainlog | wc -l
Зустрів таку позначку
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
для 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
Ця тема добре розкрита в документації
Додати щось важко, важливо бути уважним. Тут будуть особливості.
Після налаштувань згідно з інструкцією автоматично обирає локаль в залежності від налаштувань браузера відвідувача.
Два варіанти перемикача (ставив в базовий шаблон)
перший – вказано тільки інші мови
{% 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 }}”>
Розгортаємо (наприклад версія 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, але тут про нього)
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”.
Розгортаємо:
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/
Для 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)