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 %}

 

 

 

 

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, але тут про нього)

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)

Django database питання

Важливі моменти по роботі з базами даних в ORM Django.

Якщо існує база даних і її треба приєднати до проєкту.

Треба робити щось схоже на таке:

  1. налаштувати підключення бази даних ( підключення default)
  2. створити модель бази командою python manage.py inspectdb --database=default
  3. інколи можливо отримати тільки модель кожної таблиці окремо:
    python manage.py inspectdb --database=default TableName
  4. скопіювати створену модель до файлу застосунку appname\models.py
  5. база  підключена. Цілком можливо, треба буде десь виправити недоліки, та в цілому – проєкт готовий  до роботи з базою

Якщо баз даних декілька

налаштування підключення у файлі проєкту settings.py

  1. DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
    },
        "filmbase": {
            "ENGINE": "mssql",
            "NAME": "SBase",
            "USER": "User",
            "PASSWORD": "********",
            "HOST": "Server",
            "PORT": "1433",
            "OPTIONS": {"driver": "ODBC Driver 17 for SQL Server",
                       },
        },
    }  # показано як підключити БД MSSQL [pip install django mssql-django]
  2. при запитах використовувати конструкцію item.objects.using('filmbase').all()
    або завжди вказувати  item.objects.using('default').all()
  3. якщо необхідно обмежити кількість у 10 результатів можливо використати конструкцію (сортування по id або pk)
    item.objects.all().order_by('-id')[:10:1]

 

Бекап бази

  • найпростіший метод – експорт (dump) бази засобами СУБД
  • експорт то csv/xls/json засобами СУБД (складніший, але універсальний спосіб)
  •  використовувати Django dumpdata/loaddata
  • https://www.etutorialspoint.com/index.php/256-django-export-model-data-to-csv

 

 

Корисні посилання

Підключитись до MSSQL бази

http://www.pymssql.org/pymssql_examples.html

http://www.pymssql.org/freetds.html

Django та версії Python

Тут і тут є таблиця сумісності яку про всяк випадок продублюю в себе

django CMSPythonDjango
 3.93.83.73.63.53.43.23.13.02.22.12.01.11
4.0.x×××××
3.9.x×××××
3.8.x××xLTS×××
3.7.x×xxLTSLTS
3.6.x××xxx
3.5.x××xx××××
3.4.5×××xx××××LTS

 

Django versionPython versions
2.23.5, 3.6, 3.7, 3.8 (added in 2.2.8), 3.9 (added in 2.2.17)
3.03.6, 3.7, 3.8, 3.9 (added in 3.0.11)
3.13.6, 3.7, 3.8, 3.9 (added in 3.1.3)
3.23.6, 3.7, 3.8, 3.9, 3.10 (added in 3.2.9)
4.03.8, 3.9, 3.10

Магічні методи (dunder )

Магічні методи це методи, що виконуються без явного виклику(__init__, __add__, __len__, __repr__ та інші). Термін: dunder  = double undescore (з двох боків від надви подвійні підкреслення).

Тут опишу те, що використовую або планую використовувати. Як підказку (така собі cheatsheet)

__init__(self, par1, par2, …. parN): # використовується для створення властивостей класу.

створює властивості об”єкту під час створення. приклад:

new_object = Class(par1, par2, …. parN)

 

https://docs.python.org/3/reference/datamodel.html

https://docs.python.org/3/reference/import.html#submodules

 

Ubuntu – переглянути встановлені застосунки

Зазвичай все просто. Тут декілька простих способів дізнатися що саме встановлено у Вашій Убунті (кожен метод з новой строки):

apt list --installed
dpkg --get-selections | grep -v deinstall
dpkg --get-selections | grep -v deinstall > ~/packages.txt
dpkg -l
aptitude search '~i!~M'
dpkg --get-selections > ~/packages1.txt

Якщо необхідно встановити те саме (що назбирали вище) на інший сервер (або робочу станцію)

cat ~/packages.txt > sudo dpkg –set-selections && sudo apt-get dselect upgrade

або

sudo dpkg –set-selections < ~/packages.txt && sudo apt-get -u dselect-upgrade

або

dpkg --clear-selections
sudo dpkg --set-selections < ~/packages1.txt

info from there

Juniper OS (EX-2300, 4550) команди для cli-режиму

Це мій записник як доналаштувати комутатор. Все так чи інакше. налаштовано, комутатор в продакшені (працює, не можемо вимкнути надовго).

1 та найважливіше- як відкотити невдалий commit або відновити налаштування на той день коли все було добре (коли щось пішло не так а ми не знаємо коли воно таким стало):

# rollback ?
Possible completions:
<[Enter]> Execute this command
0 2021-03-12 14:39:15 EET by admin via cli
1 2021-03-12 10:29:24 EET by admin via cli
2 2021-03-12 10:26:40 EET by admin via cli
3 2021-03-12 10:24:25 EET by admin via cli
4 2021-03-12 10:18:45 EET by admin via cli
5 2021-03-12 10:16:27 EET by admin via cli
6 2021-03-12 10:10:04 EET by admin via cli
7 2021-03-12 10:09:22 EET by admin via cli
8 2021-03-12 10:09:04 EET by admin via cli
9 2021-03-12 10:07:38 EET by admin via cli
10 2021-03-09 11:51:40 EET by admin via cli
11 2021-03-01 14:21:07 EET by admin via cli
12 2020-12-07 14:13:47 EET by admin via cli

нам треба повернутися, наприклад до 2020-12-07 14:13:47 EET
# rollback 12
# commit

і все працює як було на той момент.

команда rollback без аргументів відміняє зміни, які були зроблені в поточній сесії

Django: проект для кіно Частина 1

Виникла ідея переробити застосунок, який допомагає робити кіно. Почав з Telegram-Bot та складність почала зростати і прийняв рішення почати спочатку та врахувати особливості та побажання співробітників, хто був дотичний до проекту.

Отже, які зміни:

  • вся інформація зберігається в базі даних (розробка:sqlite, продакшен:postgreSQL)
  • зробити WEB-інтерфейс (Django)
  • інтеграція/сумісна робота Django та Telegram-Бота

ці зміни спрощують роботу над проектом та дозволяють не закидати в телеграм те, що там складно зробити (ну хоча-б на початку розробки)