diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/.gitignore" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/.gitignore"
new file mode 100644
index 000000000..26d33521a
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/.gitignore"
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/DjangoProject_Web_2025.iml" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/DjangoProject_Web_2025.iml"
new file mode 100644
index 000000000..74d515a02
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/DjangoProject_Web_2025.iml"
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/inspectionProfiles/profiles_settings.xml" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/inspectionProfiles/profiles_settings.xml"
new file mode 100644
index 000000000..105ce2da2
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/inspectionProfiles/profiles_settings.xml"
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/misc.xml" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/misc.xml"
new file mode 100644
index 000000000..fdb696f72
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/misc.xml"
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/modules.xml" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/modules.xml"
new file mode 100644
index 000000000..68eeaec2b
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/modules.xml"
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/main.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/main.py"
new file mode 100644
index 000000000..5596b4478
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/main.py"
@@ -0,0 +1,16 @@
+# This is a sample Python script.
+
+# Press Shift+F10 to execute it or replace it with your code.
+# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
+
+
+def print_hi(name):
+ # Use a breakpoint in the code line below to debug your script.
+ print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.
+
+
+# Press the green button in the gutter to run the script.
+if __name__ == '__main__':
+ print_hi('PyCharm')
+
+# See PyCharm help at https://www.jetbrains.com/help/pycharm/
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/db.sqlite3" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/db.sqlite3"
new file mode 100644
index 000000000..09471ed0c
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/db.sqlite3" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__init__.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__init__.py"
new file mode 100644
index 000000000..e69de29bb
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/__init__.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/__init__.cpython-310.pyc"
new file mode 100644
index 000000000..34e55d3d0
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/__init__.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/admin.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/admin.cpython-310.pyc"
new file mode 100644
index 000000000..8fa8bb8e0
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/admin.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/apps.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/apps.cpython-310.pyc"
new file mode 100644
index 000000000..7c93c9521
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/apps.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/forms.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/forms.cpython-310.pyc"
new file mode 100644
index 000000000..4b56f9f3f
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/forms.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/models.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/models.cpython-310.pyc"
new file mode 100644
index 000000000..ce7ac4c46
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/models.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/urls.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/urls.cpython-310.pyc"
new file mode 100644
index 000000000..1ef0f7240
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/urls.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/views.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/views.cpython-310.pyc"
new file mode 100644
index 000000000..cd9284340
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/views.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/admin.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/admin.py"
new file mode 100644
index 000000000..a25171663
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/admin.py"
@@ -0,0 +1,8 @@
+from django.contrib import admin
+from .models import FeedbackMessage
+
+@admin.register(FeedbackMessage)
+class FeedbackMessageAdmin(admin.ModelAdmin):
+ list_display = ('name', 'email', 'message', 'created_at')
+ search_fields = ('name', 'email', 'message')
+ list_filter = ('created_at',)
\ No newline at end of file
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/apps.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/apps.py"
new file mode 100644
index 000000000..167f04426
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/apps.py"
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class MainConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'main'
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/forms.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/forms.py"
new file mode 100644
index 000000000..66bde7eda
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/forms.py"
@@ -0,0 +1,33 @@
+from django import forms
+from django.contrib.auth.forms import UserCreationForm
+from django.contrib.auth.models import User
+
+from .models import FeedbackMessage
+
+class ContactForm(forms.Form):
+ name = forms.CharField(label='Имя', max_length=100)
+ email = forms.EmailField(label='Email')
+ message = forms.CharField(label='Сообщение', widget=forms.Textarea)
+
+class GuestFeedbackForm(forms.ModelForm):
+ class Meta:
+ model = FeedbackMessage
+ fields = ['name', 'email', 'message']
+ widgets = {
+ 'message': forms.Textarea(attrs={'rows': 4}),
+ }
+
+class AuthenticatedFeedbackForm(forms.ModelForm):
+ class Meta:
+ model = FeedbackMessage
+ fields = ['message']
+ widgets = {
+ 'message': forms.Textarea(attrs={'rows': 4}),
+ }
+
+class RegisterForm(UserCreationForm):
+ email = forms.EmailField(required=True)
+
+ class Meta:
+ model = User
+ fields = ["username", "email", "password1", "password2"]
\ No newline at end of file
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/0001_initial.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/0001_initial.py"
new file mode 100644
index 000000000..cba2ba66b
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/0001_initial.py"
@@ -0,0 +1,24 @@
+# Generated by Django 5.2.1 on 2025-05-12 18:38
+
+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()),
+ ('sent_at', models.DateTimeField(auto_now_add=True)),
+ ],
+ ),
+ ]
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/0002_feedbackmessage.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/0002_feedbackmessage.py"
new file mode 100644
index 000000000..dad49c8ee
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/0002_feedbackmessage.py"
@@ -0,0 +1,23 @@
+# Generated by Django 5.2.1 on 2025-05-12 19:25
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('main', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='FeedbackMessage',
+ 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()),
+ ('created_at', models.DateTimeField(auto_now_add=True)),
+ ],
+ ),
+ ]
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__init__.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__init__.py"
new file mode 100644
index 000000000..e69de29bb
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/0001_initial.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/0001_initial.cpython-310.pyc"
new file mode 100644
index 000000000..7611d5749
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/0001_initial.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/0002_feedbackmessage.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/0002_feedbackmessage.cpython-310.pyc"
new file mode 100644
index 000000000..4c406a4bf
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/0002_feedbackmessage.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/__init__.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/__init__.cpython-310.pyc"
new file mode 100644
index 000000000..df64c9d0e
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/__init__.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/models.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/models.py"
new file mode 100644
index 000000000..4054030d0
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/models.py"
@@ -0,0 +1,19 @@
+from django.db import models
+
+class ContactMessage(models.Model):
+ name = models.CharField(max_length=100)
+ email = models.EmailField()
+ message = models.TextField()
+ sent_at = models.DateTimeField(auto_now_add=True)
+
+ def __str__(self):
+ return f'{self.name} ({self.email}) — {self.sent_at.strftime("%d.%m.%Y %H:%M")}'
+
+class FeedbackMessage(models.Model):
+ name = models.CharField(max_length=100)
+ email = models.EmailField()
+ message = models.TextField()
+ created_at = models.DateTimeField(auto_now_add=True)
+
+ def __str__(self):
+ return f'{self.name} ({self.email})'
\ No newline at end of file
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/static/img/django-logo-positive.png" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/static/img/django-logo-positive.png"
new file mode 100644
index 000000000..922234813
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/static/img/django-logo-positive.png" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/static/styles.css" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/static/styles.css"
new file mode 100644
index 000000000..be53ade5c
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/static/styles.css"
@@ -0,0 +1,193 @@
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+}
+
+body {
+ margin: 0;
+ font-family: 'Segoe UI', sans-serif;
+ background: #f4f4f4;
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+}
+
+header {
+ background-color: #2c3e50;
+ color: white;
+ padding: 20px 0;
+ text-align: center;
+}
+
+.django-logo {
+ position: absolute;
+ top: 10px;
+ left: 20px;
+ width: 50px;
+ height: auto;
+ animation: pulse 2s infinite ease-in-out;
+ z-index: 10;
+}
+
+.django-logo-auth{
+ position: relative;
+ animation: pulse 2s infinite ease-in-out;
+ z-index: 10;
+ height: 70px;
+}
+
+@keyframes pulse {
+ 0%, 100% {
+ transform: scale(1);
+ }
+ 50% {
+ transform: scale(1.1);
+ }
+}
+
+nav {
+ margin-top: 10px;
+}
+
+nav a {
+ color: white;
+ margin: 0 10px;
+ text-decoration: none;
+ padding: 8px 14px;
+ border-radius: 5px;
+ transition: background 0.3s ease;
+}
+
+nav a:hover {
+ background-color: #34495e;
+}
+
+nav .active {
+ background-color: #1abc9c !important;
+ color: white !important;
+}
+
+header div{
+ margin-top: 14px;
+}
+
+main {
+ flex: 1;
+ padding: 30px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+main > div, main form {
+ background: white;
+ padding: 25px 30px;
+ border-radius: 10px;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+ width: 100%;
+ max-width: 600px;
+}
+
+h2 {
+ margin-top: 0;
+ color: #2c3e50;
+}
+
+button {
+ background-color: #1abc9c;
+ color: white;
+ border: none;
+ padding: 10px 18px;
+ border-radius: 5px;
+ cursor: pointer;
+ transition: background 0.3s ease;
+}
+
+button:hover {
+ background-color: #16a085;
+}
+
+footer {
+ background-color: #2c3e50;
+ color: white;
+ text-align: center;
+ padding: 15px 0;
+ margin-top: auto;
+}
+.footer-content {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 10px;
+}
+
+.social-links a {
+ color: #eee;
+ margin: 0 10px;
+ font-size: 20px;
+ transition: color 0.3s;
+}
+
+.social-links a:hover {
+ color: #1da1f2; /* голубоватый акцент при наведении */
+}
+
+
+.error-box {
+ background-color: #ffe0e0;
+ color: #b10000;
+ border: 1px solid #b10000;
+ border-radius: 8px;
+ padding: 10px 15px;
+ margin-bottom: 15px;
+ font-size: 14px;
+}
+
+.login div {
+ margin-bottom: 14px;
+}
+
+.form-group {
+ margin-bottom: 15px;
+}
+.error {
+ color: #b10000;
+ font-size: 13px;
+ margin-top: 4px;
+}
+
+
+.fancy-list {
+ list-style: none;
+ padding-left: 0;
+}
+
+.fancy-list li {
+ margin-bottom: 10px;
+ padding-left: 24px;
+ position: relative;
+ font-size: 16px;
+}
+
+.fancy-list li::before {
+ content: "✔️";
+ position: absolute;
+ left: 0;
+ color: #1abc9c;
+}
+
+.swiper {
+ width: 100%;
+ height: auto;
+ padding-bottom: 40px;
+}
+
+.swiper-slide {
+ background: white;
+ border-radius: 10px;
+ padding: 25px;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+}
+
+
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/about.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/about.html"
new file mode 100644
index 000000000..0ce3c40c4
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/about.html"
@@ -0,0 +1,119 @@
+{% extends 'base.html' %}
+
+{% block title %}О разработке{% endblock %}
+
+{% block content %}
+
+
+
+
+
+
+
О проекте
+
Этот сайт создан на Django — мощном Python-фреймворке.
+
Он включает маршруты, шаблоны, формы, авторизацию и админку. А ещё он красивый! 😊
+
+
+
+
🔧 Использованные технологии:
+
+ - 🐍 Python 3
+ - 🕸 Django 4
+ - 🎨 HTML5 + CSS3
+ - 🧠 JavaScript (Vanilla)
+ - 🔁 AJAX
+
+
+
📌 Возможности на будущее:
+
+ - 👤 Пользовательские советы
+ - 📜 История
+ - 🌈 Цитаты по настроению
+ - ➕ Добавление советов
+ - 🌙 Тёмная тема
+
+
+
🎯 Цель проекта:
+
Создать вдохновляющий сайт, который сочетает Python и красивый, доброжелательный интерфейс.
+
+
+
+
+
📊 Навыки и распределение времени
+
+ Уровень владения технологиями
+
+
+ Распределение времени в проекте
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/base.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/base.html"
new file mode 100644
index 000000000..9acb5d27c
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/base.html"
@@ -0,0 +1,56 @@
+{% load static %}
+
+
+
+
+
+ {% block title %}Мой Django сайт{% endblock %}
+
+
+
+
+
+
+
+
+ {% block content %}{% endblock %}
+
+
+
+
+
+
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/contact.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/contact.html"
new file mode 100644
index 000000000..08aef9bae
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/contact.html"
@@ -0,0 +1,22 @@
+{% extends 'base.html' %}
+{% block title %}Обратная связь{% endblock %}
+
+{% block content %}
+
+{% endblock %}
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/index.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/index.html"
new file mode 100644
index 000000000..80decc78c
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/index.html"
@@ -0,0 +1,39 @@
+{% extends 'base.html' %}
+
+{% block title %}Главная страница{% endblock %}
+
+{% block content %}
+
+
Главная страница
+
Добро пожаловать на мой красивый Django-сайт!
+
+
+
+
Текущая дата: {{ now }}
+
+
+
Совет дня: {{ advice }}
+
+
+
+
+
+
+
Факт дня
+
{{ fact }}
+
+
+
+
+{% endblock %}
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/login.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/login.html"
new file mode 100644
index 000000000..246522549
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/login.html"
@@ -0,0 +1,36 @@
+{% extends 'base.html' %}
+{% block title %}Вход{% endblock %}
+
+{% block content %}
+
+
Вход
+
+ {% if form.errors %}
+
+
+ {% for field in form %}
+ {% for error in field.errors %}
+ - {{ error }}
+ {% endfor %}
+ {% endfor %}
+ {% for error in form.non_field_errors %}
+ - {{ error }}
+ {% endfor %}
+
+
+ {% endif %}
+
+
+
+{% endblock %}
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/messages.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/messages.html"
new file mode 100644
index 000000000..371bc0cba
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/messages.html"
@@ -0,0 +1,18 @@
+{% extends 'base.html' %}
+
+{% block title %}Сообщения{% endblock %}
+
+{% block content %}
+
+
Сообщения обратной связи
+ {% if messages %}
+
+ {% for msg in messages %}
+ - {{ msg.name }} ({{ msg.email }}): {{ msg.message }}
+ {% endfor %}
+
+ {% else %}
+
Сообщений пока нет.
+ {% endif %}
+
+{% endblock %}
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/register.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/register.html"
new file mode 100644
index 000000000..940bbfa39
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/register.html"
@@ -0,0 +1,14 @@
+{% extends 'base.html' %}
+
+{% block title %}Регистрация{% endblock %}
+
+{% block content %}
+
+
Регистрация
+
+
+{% endblock %}
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/tests.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/tests.py"
new file mode 100644
index 000000000..7ce503c2d
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/tests.py"
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/urls.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/urls.py"
new file mode 100644
index 000000000..63cec0a3e
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/urls.py"
@@ -0,0 +1,12 @@
+from django.urls import path
+from . import views
+
+urlpatterns = [
+ path('', views.index, name='index'),
+ path('about/', views.about, name='about'),
+ path('contact/', views.contact_view, name='contact'),
+ path('register/', views.register_view, name='register'),
+ path('login/', views.login_view, name='login'),
+ path('logout/', views.logout_view, name='logout'),
+ path('get-advice/', views.get_advice, name='get_advice'),
+]
\ No newline at end of file
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/views.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/views.py"
new file mode 100644
index 000000000..dcc25ba13
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/views.py"
@@ -0,0 +1,138 @@
+from django.shortcuts import render
+from .forms import ContactForm
+from .models import ContactMessage
+
+from django.contrib.auth import login, authenticate, logout
+from django.shortcuts import redirect
+from .forms import RegisterForm
+from django.contrib.auth.forms import AuthenticationForm
+
+from .forms import GuestFeedbackForm, AuthenticatedFeedbackForm
+
+# import requests
+#
+# def index(request):
+# try:
+# response = requests.get("https://api.adviceslip.com/advice")
+# advice = response.json().get('slip', {}).get('advice', '')
+# except:
+# advice = "Не удалось загрузить совет."
+# return render(request, 'index.html', {'advice': advice})
+
+
+import random
+from django.http import JsonResponse
+from django.utils.timezone import now
+
+RUSSIAN_ADVICES = [
+ "Никогда не сдавайся.",
+ "Улыбнись миру — и он улыбнется тебе в ответ.",
+ "Лучшее время начать — сейчас.",
+ "Ошибки — это путь к успеху.",
+ "Не бойся перемен — они ведут к росту.",
+ "Слушай себя, а не чужие ожидания.",
+ "Каждый день — шанс стать лучше.",
+ "Будь благодарным за малое.",
+ "Настоящая сила — в умении прощать.",
+ "Учиcь на ошибках, но не живи ими.",
+ "Не сравнивай себя с другими — у каждого свой путь.",
+ "Окружай себя теми, кто вдохновляет.",
+ "Делай добро — оно возвращается.",
+ "Терпение — ключ к успеху.",
+ "Мечтай, планируй, действуй.",
+ "Сохраняй спокойствие в трудностях.",
+ "Иногда нужно отпустить, чтобы двигаться дальше.",
+ "Не бойся просить о помощи.",
+ "Заботься о себе так же, как о других.",
+ "Ты уже делаешь больше, чем думаешь.",
+]
+
+FACTS = [
+ "Улитки могут спать до трех лет.",
+ "Самая длинная книга в мире — более 1,2 млн слов.",
+ "Мед — единственный продукт, который не портится.",
+ "Кошки спят около 70% своей жизни.",
+ "Вода может замерзать и при температуре выше 0°C.",
+]
+
+
+def index(request):
+ context = {
+ 'advice': random.choice(RUSSIAN_ADVICES),
+ 'fact': random.choice(FACTS),
+ 'now': now().strftime("%d.%m.%Y %H:%M"),
+ }
+ return render(request, 'index.html', context)
+
+def get_advice(request):
+ return JsonResponse({'advice': random.choice(RUSSIAN_ADVICES)})
+
+def about(request):
+ return render(request, 'about.html')
+
+
+
+def contact(request):
+ success = False
+ if request.method == 'POST':
+ form = ContactForm(request.POST)
+ if form.is_valid():
+ ContactMessage.objects.create(
+ name=form.cleaned_data['name'],
+ email=form.cleaned_data['email'],
+ message=form.cleaned_data['message']
+ )
+ success = True
+ form = ContactForm()
+ else:
+ form = ContactForm()
+
+ return render(request, 'contact.html', {'form': form, 'success': success})
+
+def contact_view(request):
+ if request.method == 'POST':
+ if request.user.is_authenticated:
+ form = AuthenticatedFeedbackForm(request.POST)
+ if form.is_valid():
+ feedback = form.save(commit=False)
+ feedback.name = request.user.username
+ feedback.email = request.user.email or "noemail@example.com"
+ feedback.save()
+ return redirect('index')
+ else:
+ form = GuestFeedbackForm(request.POST)
+ if form.is_valid():
+ form.save()
+ return redirect('index')
+ else:
+ form = AuthenticatedFeedbackForm() if request.user.is_authenticated else GuestFeedbackForm()
+
+ return render(request, 'contact.html', {'form': form})
+
+def register_view(request):
+ if request.method == "POST":
+ form = RegisterForm(request.POST)
+ if form.is_valid():
+ user = form.save()
+ login(request, user) # автоматический вход
+ return redirect('index')
+ else:
+ form = RegisterForm()
+ return render(request, 'register.html', {'form': form})
+
+
+def login_view(request):
+ if request.method == "POST":
+ form = AuthenticationForm(data=request.POST)
+ if form.is_valid():
+ user = form.get_user()
+ login(request, user)
+ return redirect('index')
+ else:
+ form = AuthenticationForm()
+ return render(request, 'login.html', {'form': form})
+
+
+def logout_view(request):
+ logout(request)
+ return redirect('index')
\ No newline at end of file
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/manage.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/manage.py"
new file mode 100644
index 000000000..ca4cfdb46
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/manage.py"
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+
+
+def main():
+ """python manage.py runserver"""
+ """Run administrative tasks."""
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
+ try:
+ from django.core.management import execute_from_command_line
+ except ImportError as exc:
+ raise ImportError(
+ "Couldn't import Django. Are you sure it's installed and "
+ "available on your PYTHONPATH environment variable? Did you "
+ "forget to activate a virtual environment?"
+ ) from exc
+ execute_from_command_line(sys.argv)
+
+
+if __name__ == '__main__':
+ main()
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__init__.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__init__.py"
new file mode 100644
index 000000000..e69de29bb
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/__init__.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/__init__.cpython-310.pyc"
new file mode 100644
index 000000000..2ee90ed77
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/__init__.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/settings.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/settings.cpython-310.pyc"
new file mode 100644
index 000000000..723f28c78
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/settings.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/urls.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/urls.cpython-310.pyc"
new file mode 100644
index 000000000..0a829fc84
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/urls.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/wsgi.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/wsgi.cpython-310.pyc"
new file mode 100644
index 000000000..2641cfc04
Binary files /dev/null and "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/wsgi.cpython-310.pyc" differ
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/asgi.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/asgi.py"
new file mode 100644
index 000000000..4e0d84ca0
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/asgi.py"
@@ -0,0 +1,16 @@
+"""
+ASGI config for mysite project.
+
+It exposes the ASGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/5.2/howto/deployment/asgi/
+"""
+
+import os
+
+from django.core.asgi import get_asgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
+
+application = get_asgi_application()
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/settings.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/settings.py"
new file mode 100644
index 000000000..1d98df7d1
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/settings.py"
@@ -0,0 +1,129 @@
+"""
+Django settings for mysite project.
+
+Generated by 'django-admin startproject' using Django 5.2.1.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/5.2/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/5.2/ref/settings/
+"""
+
+from pathlib import Path
+
+# Build paths inside the project like this: BASE_DIR / 'subdir'.
+BASE_DIR = Path(__file__).resolve().parent.parent
+
+
+import os
+
+STATICFILES_DIRS = [
+ os.path.join(BASE_DIR, "main/static"),
+]
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'django-insecure-2$a$68v6)c=(!ia9)tl$5jzaqp@th#+qz_x*md^y+2b6ld5x_f'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = ['localhost', '127.0.0.1']
+
+
+# Application definition
+
+INSTALLED_APPS = [
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ 'main'
+]
+
+MIDDLEWARE = [
+ 'django.middleware.security.SecurityMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'mysite.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [],
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.template.context_processors.request',
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ ],
+ },
+ },
+]
+
+WSGI_APPLICATION = 'mysite.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/5.2/ref/settings/#databases
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': BASE_DIR / 'db.sqlite3',
+ }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+ {
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/5.2/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'Europe/Moscow'
+
+USE_I18N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/5.2/howto/static-files/
+
+STATIC_URL = 'static/'
+
+# Default primary key field type
+# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field
+
+DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/urls.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/urls.py"
new file mode 100644
index 000000000..f5eac541c
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/urls.py"
@@ -0,0 +1,24 @@
+"""
+URL configuration for mysite project.
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+ https://docs.djangoproject.com/en/5.2/topics/http/urls/
+Examples:
+Function views
+ 1. Add an import: from my_app import views
+ 2. Add a URL to urlpatterns: path('', views.home, name='home')
+Class-based views
+ 1. Add an import: from other_app.views import Home
+ 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
+Including another URLconf
+ 1. Import the include() function: from django.urls import include, path
+ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
+"""
+
+from django.contrib import admin
+from django.urls import path, include
+
+urlpatterns = [
+ path('admin/', admin.site.urls),
+ path('', include('main.urls')), # подключаем main.urls
+]
diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/wsgi.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/wsgi.py"
new file mode 100644
index 000000000..35e1b4dc0
--- /dev/null
+++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/wsgi.py"
@@ -0,0 +1,16 @@
+"""
+WSGI config for mysite project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
+
+application = get_wsgi_application()