mod: squash web migrations

This commit is contained in:
2026-04-09 14:35:23 +03:00
parent 8986592e55
commit 35a681cce5
8 changed files with 15 additions and 99 deletions

View File

@@ -3,8 +3,8 @@
Сайт с новостями (блог о 3D-печать и Систем Автоматизированного Проектирования) на Django со
встроенными свистелками-перделками:
* медиа-библиотека (filer);
* WYSIWYG-редактор (ckeditor) в админке;
* типограф (по API или встроенный «типограф Муравьева», с костылями под ckeditor);
* HTML-редактор на обычной textarea в админке;
* типограф (по API или встроенный «типограф Муравьева»);
* теги новостей (taggit).
[Инструкция по развертыванию на хостинге DreamHost.com](deploy_to_dreamhost.md)

View File

@@ -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/'

View File

@@ -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 = [

View File

@@ -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='Заголовок контента <small>(допустим HTML-код, будет обработан типографом, если его включить, максимальная длинна <b>512 символов</b>)</small>', max_length=512, verbose_name='Заголовок')),
('szContentIntro', ckeditor.fields.RichTextField(default='', help_text='Анонс <small>(допустим HTML-код, будет обработан типографом, если его включить)</small>', verbose_name='Анонс')),
('szContentBody', ckeditor.fields.RichTextField(default='', help_text='Содержание <b>БЕЗ АНОНСА</b> <small>(допустим HTML-код, будет обработан типографом, если его включить)</small>', verbose_name='Содержание')),
('szContentIntro', models.TextField(default='', help_text='Анонс <small>(допустим HTML-код, будет обработан типографом, если его включить)</small>', verbose_name='Анонс')),
('szContentBody', models.TextField(default='', help_text='Содержание <b>БЕЗ АНОНСА</b> <small>(допустим HTML-код, будет обработан типографом, если его включить)</small>', verbose_name='Содержание')),
('szContentSlug', models.CharField(blank=True, default='', help_text='Слуг… 128 символов.<br /><small><b>Если оставить пустым, то slug сформируется автоматически</b></small>', 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='Обработать через <a href="https://www.typograf.ru" target="_blank">Типограф 2.0</a><br /><small><b>НОРМАЛЬНЫЙ ТИПОГРАФ, ХОРОШИЙ HTML, РЕКОМЕНДУЕМ</b> &laquo;приклеивает&raquo; союзы, поддерживает неразрывные конструкции, замена тире, кавычек и дефисов, расстановка &laquo;мягких переносов&raquo; в словах длиннее 12 символов, убирает &laquo;вдовы&raquo; &laquo;сироты&raquo; (кроме заголовков), расставляет абзацы (кроме заголовков), расшифровывает аббревиатуры (те, что знает и кроме заголовков), висячая пунктуация (только в заголовках) и т.п.</small>', verbose_name='Типограф Стандарт')),

View File

@@ -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="Анонс <small>(допустим HTML-код, будет обработан типографом,"
" если его включить)</small>"
)
szContentBody = RichTextField(
config_name='fine',
szContentBody = models.TextField(
default="",
verbose_name="Содержание",
help_text="Содержание <b>БЕЗ АНОНСА</b> <small>(допустим HTML-код, будет обработан типографом,"

View File

@@ -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/<ssh_user>/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

17
poetry.lock generated
View File

@@ -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"

View File

@@ -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"