From 5272d7503fc098bf5d8bba1e6fe23adb879c95d7 Mon Sep 17 00:00:00 2001 From: SDE Date: Thu, 11 Jul 2024 13:28:25 +0300 Subject: [PATCH] 0.5.2 documentation --- DocsApp/admin.py | 130 +++++++++++++++++- DocsApp/migrations/0001_initial.py | 65 +++++++++ ...ption_en_docart_description_ru_and_more.py | 59 ++++++++ ...ter_docart_parent_alter_docart_versions.py | 24 ++++ DocsApp/models.py | 36 ++++- DocsApp/translation.py | 19 +++ DocsApp/urls.py | 2 + DocsApp/views.py | 2 +- ...25_alter_office_work_time_from_and_more.py | 44 ++++++ pAerBim/settings.py | 9 +- requirements.pip | 2 +- 11 files changed, 386 insertions(+), 6 deletions(-) create mode 100644 DocsApp/migrations/0001_initial.py create mode 100644 DocsApp/migrations/0002_docart_description_en_docart_description_ru_and_more.py create mode 100644 DocsApp/migrations/0003_alter_docart_parent_alter_docart_versions.py create mode 100644 DocsApp/translation.py create mode 100644 GeneralApp/migrations/0025_alter_office_work_time_from_and_more.py diff --git a/DocsApp/admin.py b/DocsApp/admin.py index 8c38f3f..2c8bf7e 100644 --- a/DocsApp/admin.py +++ b/DocsApp/admin.py @@ -1,3 +1,131 @@ from django.contrib import admin +from sets.admin import * +from .models import * +from BaseModels.admin_utils import Admin_BaseIconModel +from super_inlines.admin import SuperInlineModelAdmin, SuperModelAdmin +from django.utils.translation import gettext as _ +from django import forms +from django.utils.text import slugify -# Register your models here. + + +class DocArtForm(forms.ModelForm): + class Meta: + model = DocArt + fields = '__all__' + + def __init__(self, *args, **kwargs): + super(DocArtForm, self).__init__(*args, **kwargs) + self.fields['parent'].queryset = DocArt.objects.exclude(id__exact=self.instance.id) + + +class Admin_DocArt(SuperModelAdmin, Admin_Trans_BaseModelViewPage): + form = DocArtForm + + def show_versions(self, obj): + versions = obj.versions.filter(enable=True).values_list('name', flat=True) + if versions: + return ' - '.join(versions) + return '-' + show_versions.short_description = _('Версии') + + + fieldsets = [ + (None, { + 'classes': ['wide'], + 'fields': ( + 'name', 'url', + 'enable', + 'parent', + 'versions', + 'order', + # 'title', + # 'description', + 'text', + # 'picture', + + ) + }), + # ('SEO', { + # 'classes': ['wide', 'collapse'], + # 'fields': ( + # 'seo_title', 'seo_description', 'seo_keywords', 'seo_text', + # ) + # }), + ] + + + list_display = [ + 'id', 'enable', + 'name', 'url', + 'show_versions', + 'order', 'modifiedDT', 'createDT' + ] + + # ordering = ['section', 'parent_service', 'order'] + + prepopulated_fields = {"url": ("name_en",)} + + list_display_links = ['id', 'name'] + list_editable = ['enable', 'order'] + + filter_horizontal = ['versions'] + + list_filter = [ + # 'section', 'parent_service', + 'modifiedDT', 'createDT', + ] + search_fields = ['name', 'title'] + # filter_horizontal = ['options'] + + # inlines = [Admin_StackedInline_Block] + + +admin.site.register(DocArt, Admin_DocArt) + + +class Admin_DocVersion(Admin_BaseIconModel): + + fieldsets = [ + (None, { + 'classes': ['wide'], + 'fields': ( + 'name', 'url', 'enable', 'order', + ) + }), + # ('SEO', { + # 'classes': ['wide', 'collapse'], + # 'fields': ( + # 'seo_title', 'seo_description', 'seo_keywords', 'seo_text', + # ) + # }), + ] + + + list_display = [ + 'id', 'enable', + 'name', 'url', + # 'title', + 'order', 'modifiedDT', 'createDT' + ] + + + + # ordering = ['section', 'parent_service', 'order'] + + # prepopulated_fields = {"url": ("name",)} + + list_display_links = ['id', 'name'] + list_editable = ['enable', 'order'] + + list_filter = [ + # 'section', 'parent_service', + 'modifiedDT', 'createDT', + ] + search_fields = ['name'] + # filter_horizontal = ['options'] + + # inlines = [Admin_StackedInline_Block] + + +admin.site.register(DocVersion, Admin_DocVersion) \ No newline at end of file diff --git a/DocsApp/migrations/0001_initial.py b/DocsApp/migrations/0001_initial.py new file mode 100644 index 0000000..61942f0 --- /dev/null +++ b/DocsApp/migrations/0001_initial.py @@ -0,0 +1,65 @@ +# Generated by Django 4.2.7 on 2024-07-10 16:02 + +import BaseModels.base_models +import ckeditor_uploader.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='DocVersion', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')), + ('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')), + ('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')), + ('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')), + ('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')), + ('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')), + ('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')), + ('url', models.TextField(help_text='можно изменить адрес страницы (!!! ВНИМАНИЕ !!! поисковые системы потеряют страницу и найдут лишь спустя неделю...месяц)', unique=True, verbose_name='URL привязанной страницы')), + ], + options={ + 'verbose_name': 'Версия документации', + 'verbose_name_plural': 'Версии документации', + }, + ), + migrations.CreateModel( + name='DocArt', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')), + ('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')), + ('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')), + ('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')), + ('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')), + ('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')), + ('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')), + ('url', models.TextField(help_text='можно изменить адрес страницы (!!! ВНИМАНИЕ !!! поисковые системы потеряют страницу и найдут лишь спустя неделю...месяц)', unique=True, verbose_name='URL привязанной страницы')), + ('title', models.TextField(blank=True, null=True, verbose_name='Заголовок')), + ('description', ckeditor_uploader.fields.RichTextUploadingField(blank=True, help_text='краткое описание страницы (до 240 символов)', null=True, verbose_name='Краткое описание')), + ('picture', models.FileField(blank=True, null=True, upload_to='uploads/', validators=[BaseModels.base_models.validate_file_extension], verbose_name='Картинка')), + ('visible', models.BooleanField(default=True, verbose_name='Отображать')), + ('seo_title', models.CharField(blank=True, max_length=250, null=True, verbose_name='Title (80 знаков)')), + ('seo_description', models.CharField(blank=True, max_length=250, null=True, verbose_name='Description (150 знаков)')), + ('seo_keywords', models.CharField(blank=True, max_length=250, null=True, verbose_name='Keywords (200 знаков)')), + ('seo_text', ckeditor_uploader.fields.RichTextUploadingField(blank=True, null=True, verbose_name='Текст SEO статьи')), + ('FAQ_title', models.CharField(blank=True, max_length=250, null=True, verbose_name='FAQ Заголовок')), + ('text', ckeditor_uploader.fields.RichTextUploadingField(blank=True, null=True, verbose_name='Статья')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='DocsApp.docart', verbose_name='Родитель')), + ('versions', models.ManyToManyField(blank=True, to='DocsApp.docversion', verbose_name='Подключенные версии')), + ], + options={ + 'verbose_name': 'Статья документации', + 'verbose_name_plural': 'Статьи документации', + }, + ), + ] diff --git a/DocsApp/migrations/0002_docart_description_en_docart_description_ru_and_more.py b/DocsApp/migrations/0002_docart_description_en_docart_description_ru_and_more.py new file mode 100644 index 0000000..dee7eb9 --- /dev/null +++ b/DocsApp/migrations/0002_docart_description_en_docart_description_ru_and_more.py @@ -0,0 +1,59 @@ +# Generated by Django 4.2.7 on 2024-07-10 16:12 + +import ckeditor_uploader.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('DocsApp', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='docart', + name='description_en', + field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, help_text='краткое описание страницы (до 240 символов)', null=True, verbose_name='Краткое описание'), + ), + migrations.AddField( + model_name='docart', + name='description_ru', + field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, help_text='краткое описание страницы (до 240 символов)', null=True, verbose_name='Краткое описание'), + ), + migrations.AddField( + model_name='docart', + name='name_en', + field=models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название'), + ), + migrations.AddField( + model_name='docart', + name='name_ru', + field=models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название'), + ), + migrations.AddField( + model_name='docart', + name='text_en', + field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, null=True, verbose_name='Полное описание'), + ), + migrations.AddField( + model_name='docart', + name='text_ru', + field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, null=True, verbose_name='Полное описание'), + ), + migrations.AddField( + model_name='docart', + name='title_en', + field=models.TextField(blank=True, null=True, verbose_name='Заголовок'), + ), + migrations.AddField( + model_name='docart', + name='title_ru', + field=models.TextField(blank=True, null=True, verbose_name='Заголовок'), + ), + migrations.AlterField( + model_name='docart', + name='text', + field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, null=True, verbose_name='Полное описание'), + ), + ] diff --git a/DocsApp/migrations/0003_alter_docart_parent_alter_docart_versions.py b/DocsApp/migrations/0003_alter_docart_parent_alter_docart_versions.py new file mode 100644 index 0000000..8077583 --- /dev/null +++ b/DocsApp/migrations/0003_alter_docart_parent_alter_docart_versions.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.7 on 2024-07-10 17:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('DocsApp', '0002_docart_description_en_docart_description_ru_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='docart', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rel_childArts_for_docArt', to='DocsApp.docart', verbose_name='Родитель'), + ), + migrations.AlterField( + model_name='docart', + name='versions', + field=models.ManyToManyField(blank=True, related_name='rel_docArts_for_version', to='DocsApp.docversion', verbose_name='Подключенные версии'), + ), + ] diff --git a/DocsApp/models.py b/DocsApp/models.py index 71a8362..d078483 100644 --- a/DocsApp/models.py +++ b/DocsApp/models.py @@ -1,3 +1,37 @@ from django.db import models +from BaseModels.base_models import BaseModelViewPage, BaseModel +from ckeditor_uploader.fields import RichTextUploadingField +from django.utils.translation import gettext_lazy as _ -# Create your models here. + +class DocVersion(BaseModel): + url = models.TextField( + verbose_name=_('URL привязанной страницы'), unique=True, + help_text=_('можно изменить адрес страницы (!!! ВНИМАНИЕ !!! поисковые системы потеряют страницу и найдут лишь спустя неделю...месяц)') + ) + + class Meta: + verbose_name = _('Версия документации') + verbose_name_plural = _('Версии документации') + + +class DocArt(BaseModelViewPage): + parent = models.ForeignKey( + 'DocArt', verbose_name=_('Родитель'), + null=True, blank=True, + on_delete=models.SET_NULL, + related_name='rel_childArts_for_docArt' + ) + versions = models.ManyToManyField( + DocVersion, verbose_name=_('Подключенные версии'), blank=True, + related_name='rel_docArts_for_version' + ) + + def __str__(self): + if self.name: + return self.name + else: + return str(self.id) + class Meta: + verbose_name = _('Статья документации') + verbose_name_plural = _('Статьи документации') \ No newline at end of file diff --git a/DocsApp/translation.py b/DocsApp/translation.py new file mode 100644 index 0000000..d7ef1a3 --- /dev/null +++ b/DocsApp/translation.py @@ -0,0 +1,19 @@ +from modeltranslation.translator import translator, TranslationOptions +from .models import * + + +class DocArt_TranslationOptions(TranslationOptions): + fields = ( + 'name', 'description', 'text', 'title' + ) +translator.register(DocArt, DocArt_TranslationOptions) + + +# class DocVersion_TranslationOptions(TranslationOptions): +# fields = ( +# 'name', 'description', 'text', 'title', 'FAQ_title', 'seo_title', 'seo_description', 'seo_text' +# ) +# translator.register(DocVersion, DocVersion_TranslationOptions) + + + diff --git a/DocsApp/urls.py b/DocsApp/urls.py index 0a9a4b8..3333853 100644 --- a/DocsApp/urls.py +++ b/DocsApp/urls.py @@ -6,4 +6,6 @@ from .views import * urlpatterns = [ path('docs/3dsd/', DocsView, name='docs_main'), + path('docs/3dsd/v/', DocsView, name='docs_version_page'), + path('docs/3dsd/v//', DocsView, name='docs_art_page'), ] \ No newline at end of file diff --git a/DocsApp/views.py b/DocsApp/views.py index 2649be7..86b26d0 100644 --- a/DocsApp/views.py +++ b/DocsApp/views.py @@ -9,7 +9,7 @@ from GeneralApp.funcs import get_inter_http_respose from django.utils.translation import gettext_lazy as _ -def DocsView(request): +def DocsView(request, version=None, art_url=None): Dict = {} diff --git a/GeneralApp/migrations/0025_alter_office_work_time_from_and_more.py b/GeneralApp/migrations/0025_alter_office_work_time_from_and_more.py new file mode 100644 index 0000000..8a0cbf7 --- /dev/null +++ b/GeneralApp/migrations/0025_alter_office_work_time_from_and_more.py @@ -0,0 +1,44 @@ +# Generated by Django 4.2.7 on 2024-07-10 16:02 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('GeneralApp', '0024_block_bg_video_url_en_block_bg_video_url_ru_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='office', + name='work_time_from', + field=models.TimeField(default=datetime.datetime(2024, 7, 10, 9, 0), verbose_name='Время работы с'), + ), + migrations.AlterField( + model_name='office', + name='work_time_from_en', + field=models.TimeField(default=datetime.datetime(2024, 7, 10, 9, 0), null=True, verbose_name='Время работы с'), + ), + migrations.AlterField( + model_name='office', + name='work_time_from_ru', + field=models.TimeField(default=datetime.datetime(2024, 7, 10, 9, 0), null=True, verbose_name='Время работы с'), + ), + migrations.AlterField( + model_name='office', + name='work_time_to', + field=models.TimeField(default=datetime.datetime(2024, 7, 10, 18, 0), verbose_name='Время работы до'), + ), + migrations.AlterField( + model_name='office', + name='work_time_to_en', + field=models.TimeField(default=datetime.datetime(2024, 7, 10, 18, 0), null=True, verbose_name='Время работы до'), + ), + migrations.AlterField( + model_name='office', + name='work_time_to_ru', + field=models.TimeField(default=datetime.datetime(2024, 7, 10, 18, 0), null=True, verbose_name='Время работы до'), + ), + ] diff --git a/pAerBim/settings.py b/pAerBim/settings.py index 72bfffc..b07287b 100644 --- a/pAerBim/settings.py +++ b/pAerBim/settings.py @@ -25,10 +25,11 @@ SECRET_KEY = 'django-insecure-0lk552&eia*_v5q$c8((o4=0d6x_t4%y-*x9p=n05nydiu)s9- # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True +# ALLOWED_HOSTS = [] ALLOWED_HOSTS = ['*'] SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') -CSRF_TRUSTED_ORIGINS = ['https://aerbim.com'] +CSRF_TRUSTED_ORIGINS = ['https://aerbim.com', 'http://127.0.0.1:8019/'] # Application definition @@ -56,6 +57,7 @@ INSTALLED_APPS = [ 'ServicesApp', 'SlidesApp', 'PortfolioApp', + 'DocsApp', ] MIDDLEWARE = [ @@ -70,6 +72,8 @@ MIDDLEWARE = [ # 'AuthApp.middleware.ResponseInterceptionMiddleware', ] +X_FRAME_OPTIONS = 'SAMEORIGIN' + ROOT_URLCONF = 'pAerBim.urls' TEMPLATES = [ @@ -208,6 +212,7 @@ CKEDITOR_JQUERY_URL = 'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery CKEDITOR_CONFIGS = { 'default': { + 'versionCheck': False, 'height': 291, 'width': '70vw', 'filebrowserWindowHeight': 600, @@ -245,7 +250,7 @@ CKEDITOR_CONFIGS = { '/', {'name': 'links', 'items': ['Link', 'Unlink', 'Anchor', '-', 'Blockquote' ]}, {'name': 'insert', - 'items': ['Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe']}, + 'items': ['Image', 'Update', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe']}, ], } } diff --git a/requirements.pip b/requirements.pip index c344bdc..f5152db 100644 --- a/requirements.pip +++ b/requirements.pip @@ -1,6 +1,6 @@ Django==4.2.7 django-admin-interface==0.26.1 -django-ckeditor==6.7.0 +django-ckeditor==6.7.1 django-colorfield==0.10.1 django-modeltranslation==0.18.11 Pillow==10.1.0