poetry run python -c — запуск Django в контесте менеджера проекта poetry
from django.conf import settings;print(settings.CACHES["default"]["LOCATION"]) — запуск python команды импортирующей настройки и отображающий необходимый параметр
У Django есть возможность расширить функционал списка объектов дополнительными функциюми через управление списком функций actions
Например вот так выглядит расширение для чистки кеша
def update_cdn_cache(modeladmin, request, queryset):
for obj in queryset:
obj.file.clean_cache()
А затем эта функция добавляется в класс админки
class ImageAdmin(admin.ModelAdmin):
actions = (update_cdn_cache, show_cdn_url)
По умолчанию эти функции отображаются над списком объектов в выпадающем списке и имена формируются из названий
Видно, что выглядит для наглядности необходимо добавить описание и делается это путём добавления свойства short_description для каждой функции actions, но выглядит этот вариант не красиво, особенно когда расширений админки много
def update_cdn_cache(modeladmin, request, queryset):
for obj in queryset:
obj.file.clean_cache()
update_cdn_cache.short_description = _("Remove CDN file")
Чтобы избежать такого способа можно применить параметризованный декоратор
def add_short_description(short_description: str):
def decorator(admin_action):
def wrapper(*args, **kwargs):
return admin_action(*args, **kwargs)
wrapper.__name__ = admin_action.__name__ # принудительная смена названия функции
wrapper.short_description = _(short_description) # перевод описания
return wrapper
return decorator
с таким декоратором код выглядит более читаемым
@add_short_description("Remove CDN file")
def update_cdn_cache(modeladmin, request, queryset):
for obj in queryset:
obj.file.clean_cache()
@add_short_description("Show CDN file")
def show_cdn_url(modeladmin, request, queryset):
for obj in queryset:
print(obj.file.image())
Модель UploadFile содержит данные о загруженных файла FileField, md5hash
class UploadFile(models.Model):
file = models.FileField(max_length=255)
md5hash = models.CharField(max_length=32, editable=False, unique=True)
Модель Image содержит ссылку на UploadFile, а так же дополнительные поля Alt, Name и Tags
class Image(TranslatableModel):
translations = TranslatedFields(
alt=models.CharField(max_length=50)
)
name = models.CharField(_("Name"), max_length=50)
file = models.ForeignKey(
UploadFile,
related_name="images",
on_delete=models.DO_NOTHING,
)
То-есть, объект Image может быть связан только с одним UploadFile, а объект UploadFile может быть связан с несколькими Image, а так же File, это необходимо для того чтобы получить централизованое хранилище всех загружаемых файлов, исключить дублирование файлов, а так же позвонить создавать наборы различных описаний файлов.
Необходимо в админ панели объекта Image встроить форму добавления объекта UploadFile, стандартными методами можно получит переопределив классы admin.ModelAdmin, но проще воспользовать готовыми переопределениями в пакете django-reverse-admin
Для создания такой вывернутой наизнанку админки необходимо определить такой класс
Для установки полученного сертификата необходимо публичный ключ сертификата с цепочкой корневых сертификатов в pem контейнер. Важно не перепутать последовательность: сначала сертификат домена, а затем цепочка корневых сертификатов
Для замены текст по всему файлу нужно использовать команду
:s/найти/заменить/g
опция g обязывает заменить всё, без неё будет проведена только 1 замена
Для замены текст в отдельном участке кода необходимо выделить участок в визуальном режиме, для выделения выходим в командный режим с помощью Esc, затем жмём v и перемещаем курсор до конца или начала блока текста
затем жмём :
в командной строке vim появится :'<,'>
дописываем s/найти/заменить/g так что получается
:'<,'>s/найти/заменить/g
и жмём enter
в результате текст будет заменён только в выделенном блоке
Для подключения протоколов языковых серверов в vim необходимо добавить два плагина, а чтобы это всё происходило автоматически добавить плагин установки плагинов
Затем можно запустить менеджер LSP с помощью команды
:LspManageServers
откроется буфер-диалог в котором можно выбрать необходимые LSP сервера для установки с помощью кнопки i, выйти из буфера-диалог как всегда :q
То-есть, теперь осталось лишь по одному инсталировать необходимые сервера, после чего vim начнёт использовать их для работы с исходниками
Затем, при открытии файла исходного текста vim может выдать сообщение, которое означает что для файла можно активировать поддержку LSP командой :LspInstallServer
If you want to enable Language Server, please do :LspInstallServer
Но далее необходимо провести поднастройку связки vim+LSP под свои потребности, но это в следующей части
Файлы блоков LVM/RAID0 будут размещать на 3 типах физических устройств
Шпиндельный диск HDD с интерфейсом SATA
Твердотельное хранилище SSD с интерфейсом SATA
NVME с интерфейсом M2
Для перемещения блоков LVM/RAID0 необходимо остановить VG, удалить виртуальные устройства, перенести файлы, создать устройства, запустить VG по следующему сценарию
Ниже будут показаны три комбинации конфигураций, в каждой конфигурации по два скриншота замеров производительности диска на котором размещёны блоки LVM/RAID0 и замер производительности LVM/RAID0
Первая, самая медленная, конфигурация: здесь блоки raid размещаются на SSD с интерфейсом SATA
средняя скорость чтения с SSD/SATA диска 540Мб/с
Вторая конфигурация: здесь блоки raid размещаются на обычном шпиндельном SATA диске
Средняя скорость чтения SATA 144Мб/с
Последняя, самая быстрая конфигурация: здесь блоки raid размещаются на скоростном NVME установленнам через переходник в слот PCI-Express
Средняя скорость чтения NVME 2,7Гб/м
Вывод: с помощью LVM/Raid можно получить повышение производительности цифрового хранилища.
Получается, можно взять обычный шпиндельный SATA диск, разделить его на 4 раздел, на их основе создать LVM/RAID0 и получить увеличение скорости чтения в несколько раз
даже звучит дико
сводная таблица, в кавычках количество разделов используемых в LVM/RAID0
# перейти в директорию с сертифкатами
cd /usr/local/share/ca-certificates
# скачать корневые сертификаты минцифры РФ
wget https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt
# обновить список доверенных сертификатов операционной системы
update-ca-certificates --verbose