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 %} + + + + + +
+ {% if user.is_authenticated %} + Django Logo + {% else %} + +

Добро пожаловать!

+ {% endif %} + + {% if user.is_authenticated %} +
Привет, {{ user.username }}!
+ {% endif %} +
+ +
+ {% 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 %} +
+

Обратная связь

+ +
+ {% csrf_token %} + {% for field in form %} +
+ {{ field.label_tag }} + {{ field }} + {% if field.errors %} +
{{ field.errors }}
+ {% endif %} +
+ {% endfor %} + +
+
+{% 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 %} +
+ +
+ {% endif %} + +
+ {% csrf_token %} +
+ + {{ form.username }} +
+
+ + {{ form.password }} +
+ +
+
+{% 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 %} + + {% 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 %} +
+

Регистрация

+
+ {% csrf_token %} + {{ form.as_p }} + +
+
+{% 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()