From 35a681cce5daf816cbffe10c5122a91f4f0e770e Mon Sep 17 00:00:00 2001 From: erjemin Date: Thu, 9 Apr 2026 14:35:23 +0300 Subject: [PATCH] mod: squash web migrations --- README.md | 4 +- cadpoint/cadpoint/settings.py | 46 ------------------- cadpoint/web/admin.py | 2 +- ...alter_tbcontent_szcontentbody_and_more.py} | 14 +++--- cadpoint/web/models.py | 8 +--- deploy_to_masterhost-vm.md | 22 +-------- poetry.lock | 17 +------ pyproject.toml | 1 - 8 files changed, 15 insertions(+), 99 deletions(-) rename cadpoint/web/migrations/{0001_initial.py => 0001_squashed_0002_alter_tbcontent_szcontentbody_and_more.py} (86%) diff --git a/README.md b/README.md index 6f310bb..e6a92ca 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ Сайт с новостями (блог о 3D-печать и Систем Автоматизированного Проектирования) на Django со встроенными свистелками-перделками: * медиа-библиотека (filer); -* WYSIWYG-редактор (ckeditor) в админке; -* типограф (по API или встроенный «типограф Муравьева», с костылями под ckeditor); +* HTML-редактор на обычной textarea в админке; +* типограф (по API или встроенный «типограф Муравьева»); * теги новостей (taggit). [Инструкция по развертыванию на хостинге DreamHost.com](deploy_to_dreamhost.md) diff --git a/cadpoint/cadpoint/settings.py b/cadpoint/cadpoint/settings.py index 2e9fbcd..52fcc70 100644 --- a/cadpoint/cadpoint/settings.py +++ b/cadpoint/cadpoint/settings.py @@ -60,8 +60,6 @@ INSTALLED_APPS = [ 'easy_thumbnails', 'filer.apps.FilerConfig', 'mptt.apps.MpttConfig', - # # 'ckeditor_uploader', - 'ckeditor', 'taggit.apps.TaggitAppConfig', # 'fontawesome-free' 'web.apps.WebConfig', @@ -143,50 +141,6 @@ THUMBNAIL_TRANSPARENCY_EXTENSION = 'png' THUMBNAIL_WIDGET_OPTIONS = {'size': (64, 64)} -CKEDITOR_UPLOAD_PATH = "uploads/" -CKEDITOR_BASEPATH = "/static/ckeditor/ckeditor/" -CKEDITOR_FILENAME_GENERATOR = 'utils.get_filename' -# конфигуратор ckeditor https://ckeditor.com/latest/samples/toolbarconfigurator/index.html#basic -CKEDITOR_CONFIGS = { - 'default': { - 'toolbar_mini': [ - {'name': 'document', 'items': ['Source', '-', ]}, - {'name': 'basicstyles', 'items': ['Bold', 'Italic', 'Underline', 'NumberedList', 'BulletedList', - 'Format', '-', 'RemoveFormat']}, - {'name': 'my_custom_tools', 'items': ['Preview', 'Maximize']}, - ], - 'toolbar': 'mini', # put selected toolbar config here - 'height': '110', - 'toolbarCanCollapse': True, - }, - 'fine': { - 'toolbar_fine': [ - {'name': 'document', 'items': ['Source', '-' ]}, - {'name': 'clipboard', 'items': ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo']}, - {'name': 'basicstyles', - 'items': ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat']}, - {'name': 'my_custom_tools', 'items': ['Preview', 'Maximize']}, - '/', - {'name': 'paragraph', - 'items': ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', - 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', 'Styles', 'Format', 'Iframe']}, - {'name': 'links', 'items': ['Link', 'Unlink', 'Anchor']}, - {'name': 'insert', 'items': ['Image', 'Table', 'HorizontalRule', 'SpecialChar']}, - ], - 'toolbar': 'fine', - # 'removeButtons': 'Save,NewPage,ExportPdf,Preview,Print,Templates,Find,Replace,SelectAll,Scayt,Form,' - # 'Checkbox,Radio,TextField,Textarea,Select,Button,ImageButton,HiddenField,Format,' - # 'Font,FontSize,Maximize,ShowBlocks,About,Styles,Flash,Smiley,PageBreak,Iframe,BidiLtr,' - # 'BidiRtl,Language,JustifyBlock,JustifyRight,JustifyCenter,JustifyLeft,Indent,Outdent,' - # 'Strike,TextColor,BGColor, - 'toolbarCanCollapse': True, - # 'extraPlugins': 'filer', - # 'editor': [ - # {'name': 'filebrowserBrowseUrl', 'items': ''}, - # {'name': 'filebrowserUploadUrl', 'items': ''}, - # ], - }, -} FILER_SUBJECT_LOCATION_IMAGE_DEBUG = True FILER_CANONICAL_URL = 'sharing/' diff --git a/cadpoint/web/admin.py b/cadpoint/web/admin.py index 6f96713..8864232 100644 --- a/cadpoint/web/admin.py +++ b/cadpoint/web/admin.py @@ -17,7 +17,7 @@ class AdminContent(admin.ModelAdmin): # настройка длины поля TextInput в админке formfield_overrides = { models.CharField: {'widget': TextInput(attrs={'size': '100%'})}, - # models.TextField: {'widget': Textarea(attrs={'rows': 4, 'cols': 40})}, + models.TextField: {'widget': Textarea(attrs={'rows': 14, 'cols': 120})}, } # Настройка страницы редактирования fieldsets = [ diff --git a/cadpoint/web/migrations/0001_initial.py b/cadpoint/web/migrations/0001_squashed_0002_alter_tbcontent_szcontentbody_and_more.py similarity index 86% rename from cadpoint/web/migrations/0001_initial.py rename to cadpoint/web/migrations/0001_squashed_0002_alter_tbcontent_szcontentbody_and_more.py index 4e5b0b3..78c246d 100644 --- a/cadpoint/web/migrations/0001_initial.py +++ b/cadpoint/web/migrations/0001_squashed_0002_alter_tbcontent_szcontentbody_and_more.py @@ -1,7 +1,7 @@ -# Generated by Django 3.2.6 on 2022-12-14 19:11 +# Generated by Django 4.2.30 on 2026-04-09 11:26 -import ckeditor.fields from django.db import migrations, models +import django.db.models.deletion import django.utils.timezone import filer.fields.file import taggit.managers @@ -9,13 +9,13 @@ import taggit.managers class Migration(migrations.Migration): + replaces = [('web', '0001_initial'), ('web', '0002_alter_tbcontent_szcontentbody_and_more')] + initial = True dependencies = [ - ('taggit', '0003_taggeditem_add_unique_index'), - # В установленной версии django-filer есть миграция 0013_image_width_height_to_float, - # а ссылка на 0013_auto_20221214_2211 относится к другой/несуществующей версии пакета. ('filer', '0013_image_width_height_to_float'), + ('taggit', '0003_taggeditem_add_unique_index'), ] operations = [ @@ -49,8 +49,8 @@ class Migration(migrations.Migration): ('tdContentPublishUp', models.DateTimeField(db_index=True, default=django.utils.timezone.now, help_text='Дата публикации, с её момента новость появится на сайте.', verbose_name='Начало публикации')), ('tdContentPublishDown', models.DateTimeField(blank=True, db_index=True, help_text='Дата окончания публикации, с её момента новость исчезнет с сайта.', null=True, verbose_name='Окончания публикации')), ('szContentHead', models.CharField(default='', help_text='Заголовок контента (допустим HTML-код, будет обработан типографом, если его включить, максимальная длинна 512 символов)', max_length=512, verbose_name='Заголовок')), - ('szContentIntro', ckeditor.fields.RichTextField(default='', help_text='Анонс (допустим HTML-код, будет обработан типографом, если его включить)', verbose_name='Анонс')), - ('szContentBody', ckeditor.fields.RichTextField(default='', help_text='Содержание БЕЗ АНОНСА (допустим HTML-код, будет обработан типографом, если его включить)', verbose_name='Содержание')), + ('szContentIntro', models.TextField(default='', help_text='Анонс (допустим HTML-код, будет обработан типографом, если его включить)', verbose_name='Анонс')), + ('szContentBody', models.TextField(default='', help_text='Содержание БЕЗ АНОНСА (допустим HTML-код, будет обработан типографом, если его включить)', verbose_name='Содержание')), ('szContentSlug', models.CharField(blank=True, default='', help_text='Слуг… 128 символов.
Если оставить пустым, то slug сформируется автоматически', max_length=128, null=True, verbose_name='Slug')), ('iContentHits', models.PositiveIntegerField(db_index=True, default=0, help_text='Число просмотров', verbose_name='◉')), ('bTypograf', models.BooleanField(default=False, help_text='Обработать через Типограф 2.0
НОРМАЛЬНЫЙ ТИПОГРАФ, ХОРОШИЙ HTML, РЕКОМЕНДУЕМ «приклеивает» союзы, поддерживает неразрывные конструкции, замена тире, кавычек и дефисов, расстановка «мягких переносов» в словах длиннее 12 символов, убирает «вдовы» «сироты» (кроме заголовков), расставляет абзацы (кроме заголовков), расшифровывает аббревиатуры (те, что знает и кроме заголовков), висячая пунктуация (только в заголовках) и т.п.', verbose_name='Типограф Стандарт')), diff --git a/cadpoint/web/models.py b/cadpoint/web/models.py index 5367fbd..bae9a2d 100644 --- a/cadpoint/web/models.py +++ b/cadpoint/web/models.py @@ -3,12 +3,10 @@ from django.db import models from django.utils.timezone import now from filer.fields.image import FilerFileField -from ckeditor.fields import RichTextField from taggit.managers import TaggableManager from taggit.models import Tag, TaggedItem from web.add_function import safe_html_special_symbols, post_processing_html import urllib3 -import re import pytils import random import datetime @@ -90,15 +88,13 @@ class TbContent(models.Model): verbose_name="Превью", help_text="Картинка-превью" ) - szContentIntro = RichTextField( - config_name='fine', + szContentIntro = models.TextField( default="", verbose_name="Анонс", help_text="Анонс (допустим HTML-код, будет обработан типографом," " если его включить)" ) - szContentBody = RichTextField( - config_name='fine', + szContentBody = models.TextField( default="", verbose_name="Содержание", help_text="Содержание БЕЗ АНОНСА (допустим HTML-код, будет обработан типографом," diff --git a/deploy_to_masterhost-vm.md b/deploy_to_masterhost-vm.md index f7884b0..7717b05 100644 --- a/deploy_to_masterhost-vm.md +++ b/deploy_to_masterhost-vm.md @@ -836,11 +836,10 @@ pip -V | django | 3.2.15 | Фреймворк Django | притащит с собой пакеты: __asgiref__, __pytz__ и __sqlparse__ | mysqlclient | 2.1.1 | Коннектор MySQL | нет | django-filer | 2.2.2 | Система управления медиа-файлами с фишками подготовки ресайз-картинок, превьюшек и прочими плюшками | притащит с собой пакеты: __Unidecode__, __django-js-asset__, __django-mptt__, __django-polymorphic__, __easy-thumbnails__ и __pillow__ -| django-ckeditor | 6.4.2 | Wysiwyg-редактор (ckeditor) для админки | нет +| htmlarea | встроено | Обычная многострочная форма редактирования HTML в админке | нет | django-taggit | 3.0.0 | Ситема управления тегами | нет | pytils | 0.4.4 | Пакет рускоязычной транслитерации, работы с числительными, склонениями числительных и временными диаппазонами (для Python 3.x) | нет | urllib3 | 1.26.11 | пакет для работы с web-запросами (проекту этот пакет нужен для работы с API внешний HTML-типографов) | нет -| django-ckeditor-filebrowser-filer | 0.3.0 | Плугин для дружбы Wysiwyg-редквтора (ckeditor) и django-filer | нет, все зависимости уже притащил django-filer Все эти пакеты устанавливаются в виртуальное окружение с помощью пакетного менеджера `pip` в последовательности: @@ -849,9 +848,7 @@ pip -V pip install Django==3.2.15 pip install mysqlclient==2.1.1 pip install django-filer==2.2.2 -pip install django-ckeditor==6.4.2 pip install django-taggit==3.0.0 -pip install django-ckeditor-filebrowser-filer pip install pytils==0.4.4 pip install urllib3==1.26.11 ``` @@ -922,22 +919,7 @@ from django.conf.urls import include from django.urls import re_path as url ``` -Подобные изменения следует сделать так же в файле __urls.py__ батарейки __ckeditor_filebrowser_filer__ -`/home//cadpoint/env/lib/python3.8/site-packages/ckeditor_filebrowser_filer/urls.py`. Вместо: -```python -from django.conf.urls import url -``` - -Следует написать: -```python -from django.urls import re_path as url -``` - -должно получиться: -```python -# from django.conf.urls import url -from django.urls import re_path as url -``` +Редактор в админке теперь обычный, поэтому отдельные правки для стороннего WYSIWYG-пакета больше не нужны. Теперь можно произвести перенос статических файлов админки и батареек в папку для web-статики: ```shell diff --git a/poetry.lock b/poetry.lock index 17a6e95..27b2539 100644 --- a/poetry.lock +++ b/poetry.lock @@ -191,21 +191,6 @@ tzdata = {version = "*", markers = "sys_platform == \"win32\""} argon2 = ["argon2-cffi (>=19.1.0)"] bcrypt = ["bcrypt"] -[[package]] -name = "django-ckeditor" -version = "6.7.3" -description = "Django admin CKEditor integration." -optional = false -python-versions = ">=3.8" -files = [ - {file = "django_ckeditor-6.7.3-py3-none-any.whl", hash = "sha256:09771c9b8fb33b84bd2767dfc891a24b7fbdb0120910a7ec65b763a4ae6807bb"}, - {file = "django_ckeditor-6.7.3.tar.gz", hash = "sha256:889fd80ee7d368e3c5b828c8dabf8907d56bcad6bf5881f3898416df4f2adfe7"}, -] - -[package.dependencies] -Django = ">=3.2" -django-js-asset = ">=2.0" - [[package]] name = "django-debug-toolbar" version = "6.3.0" @@ -758,4 +743,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.12,<3.13" -content-hash = "66d107c777ecea4c961db8372d47d8761fbcba828907ca62ddfcb08b11a6a185" +content-hash = "cf13db3bf3b15a2f88dfb865ab7a5a0507c76d1c8c1f0c66b63b17d27893cdf5" diff --git a/pyproject.toml b/pyproject.toml index 961207c..91bd8a0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,6 @@ packages = [ [tool.poetry.dependencies] python = ">=3.12,<3.13" Django = "^4.2" -django-ckeditor = "^6.7" django-filer = "^3.4" easy-thumbnails = "^2.10" django-taggit = "^6.1"