diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/db.sqlite3" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/db.sqlite3" new file mode 100644 index 000000000..0d2d426db Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/db.sqlite3" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__init__.py" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__init__.py" new file mode 100644 index 000000000..e69de29bb diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/__init__.cpython-310.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/__init__.cpython-310.pyc" new file mode 100644 index 000000000..c0533cd72 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/__init__.cpython-310.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/__init__.cpython-39.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/__init__.cpython-39.pyc" new file mode 100644 index 000000000..10e19b005 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/__init__.cpython-39.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/admin.cpython-310.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/admin.cpython-310.pyc" new file mode 100644 index 000000000..1cd82acb6 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/admin.cpython-310.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/admin.cpython-39.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/admin.cpython-39.pyc" new file mode 100644 index 000000000..da5d67bcc Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/admin.cpython-39.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/forms.cpython-310.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/forms.cpython-310.pyc" new file mode 100644 index 000000000..5cfcc0a01 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/forms.cpython-310.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/forms.cpython-39.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/forms.cpython-39.pyc" new file mode 100644 index 000000000..266ccbd8e Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/forms.cpython-39.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/models.cpython-310.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/models.cpython-310.pyc" new file mode 100644 index 000000000..d640238af Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/models.cpython-310.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/models.cpython-39.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/models.cpython-39.pyc" new file mode 100644 index 000000000..d311b6ce7 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/models.cpython-39.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/urls.cpython-310.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/urls.cpython-310.pyc" new file mode 100644 index 000000000..6b99e12a9 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/urls.cpython-310.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/urls.cpython-39.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/urls.cpython-39.pyc" new file mode 100644 index 000000000..88183909e Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/urls.cpython-39.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/views.cpython-310.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/views.cpython-310.pyc" new file mode 100644 index 000000000..a08a9c3c5 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/views.cpython-310.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/views.cpython-39.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/views.cpython-39.pyc" new file mode 100644 index 000000000..6e3b519af Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/__pycache__/views.cpython-39.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/admin.py" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/admin.py" new file mode 100644 index 000000000..3b9e000e5 --- /dev/null +++ "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/admin.py" @@ -0,0 +1,6 @@ +from django.contrib import admin +from .models import ContactMessage +from .models import Technique + +admin.site.register(ContactMessage) +admin.site.register(Technique) diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/forms.py" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/forms.py" new file mode 100644 index 000000000..ba1b47d5c --- /dev/null +++ "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/forms.py" @@ -0,0 +1,6 @@ +from django import forms + +class ContactForm(forms.Form): + name = forms.CharField(label='Ваше имя', max_length=100) + email = forms.EmailField(label='Email') + message = forms.CharField(label='Сообщение', widget=forms.Textarea) \ No newline at end of file diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/0001_initial.py" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/0001_initial.py" new file mode 100644 index 000000000..432f368de --- /dev/null +++ "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/0001_initial.py" @@ -0,0 +1,24 @@ +# Generated by Django 4.2.21 on 2025-05-21 09:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='ContactMessage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('email', models.EmailField(max_length=254)), + ('message', models.TextField()), + ('submitted_at', models.DateTimeField(auto_now_add=True)), + ], + ), + ] diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/0002_technique.py" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/0002_technique.py" new file mode 100644 index 000000000..918984d27 --- /dev/null +++ "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/0002_technique.py" @@ -0,0 +1,22 @@ +# Generated by Django 4.2.21 on 2025-05-21 11:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Technique', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200)), + ('image', models.ImageField(upload_to='tech_images/')), + ('description', models.TextField()), + ], + ), + ] diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/0003_technique_thumbnail_alter_technique_image.py" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/0003_technique_thumbnail_alter_technique_image.py" new file mode 100644 index 000000000..6dcf2889c --- /dev/null +++ "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/0003_technique_thumbnail_alter_technique_image.py" @@ -0,0 +1,23 @@ +# Generated by Django 4.2.21 on 2025-05-21 13:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0002_technique'), + ] + + operations = [ + migrations.AddField( + model_name='technique', + name='thumbnail', + field=models.ImageField(blank=True, null=True, upload_to='tech_images/thumbs/'), + ), + migrations.AlterField( + model_name='technique', + name='image', + field=models.ImageField(upload_to='tech_images/full/'), + ), + ] diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__init__.py" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__init__.py" new file mode 100644 index 000000000..e69de29bb diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0001_initial.cpython-310.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0001_initial.cpython-310.pyc" new file mode 100644 index 000000000..4693716e3 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0001_initial.cpython-310.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0001_initial.cpython-39.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0001_initial.cpython-39.pyc" new file mode 100644 index 000000000..683e4b462 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0001_initial.cpython-39.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0002_technique.cpython-310.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0002_technique.cpython-310.pyc" new file mode 100644 index 000000000..4c6aebed0 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0002_technique.cpython-310.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0002_technique.cpython-39.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0002_technique.cpython-39.pyc" new file mode 100644 index 000000000..4ad02d59c Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0002_technique.cpython-39.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0003_technique_thumbnail_alter_technique_image.cpython-310.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0003_technique_thumbnail_alter_technique_image.cpython-310.pyc" new file mode 100644 index 000000000..9db2a4d48 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/0003_technique_thumbnail_alter_technique_image.cpython-310.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/__init__.cpython-310.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/__init__.cpython-310.pyc" new file mode 100644 index 000000000..ef0b5fc7b Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/__init__.cpython-310.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/__init__.cpython-39.pyc" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/__init__.cpython-39.pyc" new file mode 100644 index 000000000..1944a4644 Binary files /dev/null and "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/migrations/__pycache__/__init__.cpython-39.pyc" differ diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/models.py" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/models.py" new file mode 100644 index 000000000..253bbfc67 --- /dev/null +++ "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/models.py" @@ -0,0 +1,16 @@ +from django.db import models + +class ContactMessage(models.Model): + name = models.CharField(max_length=100) + email = models.EmailField() + message = models.TextField() + submitted_at = models.DateTimeField(auto_now_add=True) + def __str__(self): + return f"{self.name} ({self.email})" +class Technique(models.Model): + title = models.CharField(max_length=200) + image = models.ImageField(upload_to='tech_images/full/') + thumbnail = models.ImageField(upload_to='tech_images/thumbs/', null=True, blank=True) + description = models.TextField() + def __str__(self): + return self.title \ No newline at end of file diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/static/main.css" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/static/main.css" new file mode 100644 index 000000000..6f96aa380 --- /dev/null +++ "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/static/main.css" @@ -0,0 +1,389 @@ + +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html, body { + height: 100%; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + background-color: #f0f0f5; + color: #222; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + display: flex; + flex-direction: column; + min-height: 100vh; +} + +header, footer { + background-color: #2c3e50; + color: white; + padding: 15px 20px; + text-align: center; + box-shadow: 0 2px 6px rgba(0,0,0,0.3); + flex-shrink: 0; + font-weight: 600; + letter-spacing: 0.05em; + font-size: 1.1rem; +} + +header h1 { + color: #ffffff; + font-size: 2.0rem; + font-weight: 800; + text-transform: uppercase; + letter-spacing: 0.08em; + margin: 10px 0; + text-shadow: 0 2px 4px rgba(0, 0, 0, 0.6); +} + + +footer { + margin-top: auto; +} + +footer h1, footer h2, footer p, footer span { + color: #ffffff; + font-size: 1.3rem; + font-weight: 700; + letter-spacing: 0.05em; + text-shadow: 0 2px 4px rgba(0, 0, 0, 0.6); + margin: 5px 0; +} + + + +nav a { + color: white; + margin: 0 15px; + text-decoration: none; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + transition: color 0.3s ease; +} + +nav a:hover { + color: #1abc9c; + text-decoration: underline; +} + + +.content-wrapper { + padding: 30px 25px; + background: white; + max-width: 960px; + margin: 40px auto; + border-radius: 14px; + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1); + transition: box-shadow 0.3s ease; +} + +.content-wrapper:hover { + box-shadow: 0 12px 28px rgba(26, 188, 156, 0.25); +} + + +.content-wrapper.about-wrapper p:first-of-type { + max-width: 700px; + margin: 0 auto 25px auto; + text-align: center; + color: #34495e; + font-weight: 600; + font-size: 1.2rem; + line-height: 1.5; +} + + +h1, h2, h3 { + font-family: 'Poppins', sans-serif; + font-weight: 700; + letter-spacing: 0.04em; + color: #34495e; + text-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + + +p, li { + font-size: 1.1rem; + color: #555; + line-height: 1.7; + letter-spacing: 0.02em; + font-weight: 400; + margin-bottom: 18px; +} + + +.tech-detail p { + font-size: 1.15rem; + color: #555; + line-height: 1.85; + max-width: 720px; + margin: 0 auto 30px; + font-weight: 400; + text-align: justify; + text-indent: 1.2em; + border-left: 4px solid #1abc9c; + padding-left: 12px; + background-color: #f9fcfb; + border-radius: 8px; + box-shadow: 0 2px 6px rgba(26, 188, 156, 0.1); + transition: background-color 0.3s ease; +} + +.tech-detail p:hover { + background-color: #e0f2ef; +} + + +ul { + padding-left: 20px; + margin: 15px 0 25px 0; +} + +ul li { + margin-bottom: 10px; +} + + +.gallery { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 28px; + margin-top: 25px; +} + +.gallery-item { + display: block; + background: #fff; + border-radius: 14px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.07); + overflow: hidden; + text-align: center; + text-decoration: none; + color: #2c3e50; + transition: transform 0.25s ease, box-shadow 0.25s ease; + cursor: pointer; +} + +.gallery-item:hover { + transform: translateY(-10px) scale(1.03); + box-shadow: 0 12px 26px rgba(26, 188, 156, 0.25); +} + +.gallery-item img { + width: 100%; + height: 180px; + object-fit: cover; + display: block; + border-bottom: 2px solid #1abc9c; + transition: filter 0.3s ease; +} + +.gallery-item:hover img { + filter: brightness(0.85); +} + +.gallery-item p { + margin: 0; + padding: 14px 12px; + font-weight: 700; + font-size: 1.05rem; + background-color: #ecf0f1; + color: #16a085; + letter-spacing: 0.03em; + text-transform: uppercase; +} + + +.tech-detail { + text-align: center; +} + +.tech-detail img { + max-width: 100%; + height: auto; + border-radius: 14px; + margin-bottom: 30px; + box-shadow: 0 8px 20px rgba(26, 188, 156, 0.25); + transition: box-shadow 0.3s ease; +} + +.tech-detail img:hover { + box-shadow: 0 12px 30px rgba(22, 160, 133, 0.4); +} + +.tech-detail h2 { + font-size: 2rem; + margin-bottom: 20px; + color: #2c3e50; + text-transform: uppercase; + letter-spacing: 0.05em; +} + + +.back-link { + display: inline-block; + margin-top: 25px; + padding: 10px 24px; + border: 2px solid #1abc9c; + border-radius: 30px; + text-decoration: none; + color: #1abc9c; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; + transition: background-color 0.3s ease, color 0.3s ease; +} + +.back-link:hover { + background-color: #1abc9c; + color: white; +} + + +form { + max-width: 480px; + margin: 0 auto; + background: #fafafa; + padding: 30px 25px; + border-radius: 14px; + box-shadow: 0 8px 24px rgba(26, 188, 156, 0.15); + border: 1px solid #d0d7de; + transition: box-shadow 0.3s ease; +} + +form:hover { + box-shadow: 0 10px 30px rgba(22, 160, 133, 0.3); +} + +form p { + margin-bottom: 18px; + font-weight: 600; + color: #34495e; +} + +input[type="text"], +input[type="email"], +textarea { + width: 100%; + padding: 12px 16px; + margin-top: 6px; + margin-bottom: 18px; + border: 2px solid #bdc3c7; + border-radius: 8px; + font-size: 1rem; + font-family: inherit; + transition: border-color 0.3s ease, box-shadow 0.3s ease; + resize: vertical; +} + +input[type="text"]:focus, +input[type="email"]:focus, +textarea:focus { + border-color: #1abc9c; + box-shadow: 0 0 8px rgba(26, 188, 156, 0.4); + outline: none; +} + +button[type="submit"] { + background-color: #1abc9c; + border: none; + color: white; + padding: 14px 28px; + font-size: 1.1rem; + font-weight: 700; + border-radius: 30px; + cursor: pointer; + width: 100%; + transition: background-color 0.3s ease, box-shadow 0.3s ease; + text-transform: uppercase; + letter-spacing: 0.06em; +} + +button[type="submit"]:hover { + background-color: #16a085; + box-shadow: 0 6px 14px rgba(22, 160, 133, 0.4); +} + + +ul { + list-style: none; + padding-left: 0; + margin-top: 15px; + max-width: 480px; + margin-left: auto; + margin-right: auto; +} + +ul li { + background-color: #dff0d8; + color: #3c763d; + padding: 12px 20px; + border-radius: 8px; + margin-bottom: 10px; + box-shadow: 0 2px 6px rgba(0,0,0,0.05); + font-weight: 600; + text-align: center; +} + + +.login-wrapper { + max-width: 400px; + margin: 60px auto; + background: #fff; + padding: 40px 30px; + border-radius: 18px; + box-shadow: 0 10px 28px rgba(26, 188, 156, 0.25); + font-family: 'Poppins', sans-serif; +} + +.login-wrapper h2 { + margin-bottom: 25px; + font-size: 2rem; + color: #2c3e50; + text-align: center; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.login-wrapper form input[type="text"], +.login-wrapper form input[type="password"] { + width: 100%; + padding: 14px 18px; + margin-bottom: 22px; + border-radius: 10px; + border: 2px solid #bdc3c7; + font-size: 1rem; + transition: border-color 0.3s ease, box-shadow 0.3s ease; +} + +.login-wrapper form input[type="text"]:focus, +.login-wrapper form input[type="password"]:focus { + border-color: #1abc9c; + box-shadow: 0 0 8px rgba(26, 188, 156, 0.4); + outline: none; +} + +.login-wrapper form button { + width: 100%; + padding: 14px 0; + background-color: #1abc9c; + border: none; + border-radius: 30px; + color: white; + font-weight: 700; + font-size: 1.1rem; + cursor: pointer; + text-transform: uppercase; + letter-spacing: 0.06em; + transition: background-color 0.3s ease, box-shadow 0.3s ease; +} + +.login-wrapper form button:hover { + background-color: #16a085; + box-shadow: 0 6px 14px rgba(22, 160, 133, 0.4); +} diff --git "a/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/templates/about.html" "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/templates/about.html" new file mode 100644 index 000000000..ab9f57374 --- /dev/null +++ "b/work/K3321/\320\257\320\267\320\265\320\262_\320\223\321\200\320\270\320\263\320\276\321\200\320\270\320\271_\320\220\320\275\320\264\321\200\320\265\320\265\320\262\320\270\321\207/lab7-8/WEB_LAB7-8/main/templates/about.html" @@ -0,0 +1,16 @@ +{% extends "base.html" %} +{% block title %}О сайте{% endblock %} +{% block content %} + +

О сайте

+

Этот сайт посвящён авиационной технике России. Основной функционал включает:

+