diff --git "a/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/.gitignore" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/.gitignore"
new file mode 100644
index 000000000..536a89c5c
--- /dev/null
+++ "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/.gitignore"
@@ -0,0 +1,37 @@
+# Python
+*.pyc
+*.pyo
+__pycache__/
+
+# Django
+*.log
+*.pot
+*.pyc
+*.pyo
+*.sqlite3
+
+# Environments
+.env
+.venv/
+
+# Media
+/media/
+
+# Static files
+/staticfiles/
+
+# VSCode
+.vscode/
+
+# MacOS
+.DS_Store
+
+# Windows
+Thumbs.db
+
+# IDEs
+.idea/
+*.iml
+
+# Node
+node_modules/
diff --git "a/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/README.md" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/README.md"
new file mode 100644
index 000000000..1bafa023a
--- /dev/null
+++ "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/README.md"
@@ -0,0 +1,97 @@
+# Отчёт по лабораторным работам 7-8.
+
+**Тема:** Создание веб-приложения на Django
+
+**Студент:** Шевченко Кристина Валерьевна
+
+**Группа:** К3320
+
+
+
+## Цель работы:
+Создать веб-приложение на Django с тремя страницами:
+1. Главная страница.
+2. Страница "О разработке".
+3. Страница "Обратная связь".
+
+Реализовать общие хедер и футер для всех страниц, а также форму обратной связи с обработкой данных.
+
+---
+
+## Выполненные задачи:
+
+### 1. Создание проекта и приложения
+- Создан проект Django с именем [`myproject`](myproject ).
+- Создано приложение [`main`](main) для реализации функционала.
+
+### 2. Настройка базового шаблона
+- Создан базовый шаблон `base.html`, содержащий общие элементы:
+ - Хедер с навигацией (ссылки на главную страницу, страницу "О разработке" и "Обратная связь").
+ - Футер с копирайтом, контактной информацией и ссылками на страницы.
+- Подключены стили через файл `styles.css`.
+
+### 3. Реализация страниц
+- **Главная страница**:
+ - Отображает приветственное сообщение и список достопримечательностей Байкала.
+ - Использует шаблон `index.html`.
+- **Страница "О разработке"**:
+ - Содержит информацию о проекте, разработчике, используемых технологиях и полезные ссылки.
+ - Использует шаблон `about.html`.
+- **Страница "Обратная связь"**:
+ - Содержит форму обратной связи с полями:
+ - Имя.
+ - Email.
+ - Сообщение.
+ - Реализована обработка данных формы и вывод сообщений об успешной отправке или ошибках.
+
+### 4. Реализация формы обратной связи
+- Создана форма `ContactForm` в файле `forms.py` с использованием Django Forms.
+- Поля формы:
+ - `name` — имя пользователя.
+ - `email` — email пользователя.
+ - `message` — сообщение.
+- Реализована обработка данных формы в представлении `contacts`:
+ - При успешной отправке выводится сообщение об успешной отправке.
+ - При ошибках отображаются соответствующие сообщения.
+
+
+### 6. Работа с моделью
+- Создана модель `Place` для хранения информации о достопримечательностях Байкала:
+ - Название.
+ - Описание.
+ - Изображение.
+- Данные о достопримечательностях отображаются на главной странице.
+
+
+
+
+---
+
+## Используемые технологии:
+- **Python 3.10**.
+- **Django 5.2**.
+- **HTML5 и CSS3**.
+- **SQLite** для хранения данных.
+
+---
+
+## Результат:
+В результате выполнения лабораторной работы создано веб-приложение с тремя страницами:
+1. **Главная страница**:
+ - Отображает список достопримечательностей Байкала.
+2. **Страница "О разработке"**:
+ - Содержит информацию о проекте, разработчике и используемых технологиях.
+3. **Страница "Обратная связь"**:
+ - Содержит форму обратной связи с обработкой данных.
+
+Приложение имеет общий хедер и футер, современный дизайн и удобный интерфейс.
+
+---
+
+## Вывод:
+В ходе лабораторной работы были изучены и применены основные возможности Django:
+- Работа с шаблонами.
+- Создание форм и обработка данных.
+- Использование моделей для хранения данных.
+
+Проект успешно выполнен и соответствует требованиям задания.
diff --git "a/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/__init__.py" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/__init__.py"
new file mode 100644
index 000000000..e69de29bb
diff --git "a/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/admin.py" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/admin.py"
new file mode 100644
index 000000000..d7bb5afb1
--- /dev/null
+++ "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/admin.py"
@@ -0,0 +1,7 @@
+
+from django.contrib import admin
+from .models import Place
+
+@admin.register(Place)
+class PlaceAdmin(admin.ModelAdmin):
+ list_display = ('name',)
\ No newline at end of file
diff --git "a/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/apps.py" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/apps.py"
new file mode 100644
index 000000000..167f04426
--- /dev/null
+++ "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/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/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/forms.py" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/forms.py"
new file mode 100644
index 000000000..d2ddeb32b
--- /dev/null
+++ "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/forms.py"
@@ -0,0 +1,6 @@
+from django import forms
+
+class ContactForm(forms.Form):
+ name = forms.CharField(min_length=2, max_length=100, label='Имя', widget=forms.TextInput(attrs={'placeholder': 'Ваше имя', 'class': 'form-control valid'}))
+ email = forms.EmailField(label='Email', widget=forms.EmailInput(attrs={'placeholder': 'Ваш email', 'class': 'form-control valid'}))
+ message = forms.CharField(label='Сообщение', widget=forms.Textarea(attrs={'placeholder': 'Ваше сообщение', 'class': 'form-control valid'}))
\ No newline at end of file
diff --git "a/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/migrations/0001_initial.py" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/migrations/0001_initial.py"
new file mode 100644
index 000000000..7d1d50866
--- /dev/null
+++ "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/migrations/0001_initial.py"
@@ -0,0 +1,23 @@
+# Generated by Django 5.2.1 on 2025-05-11 11:05
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Place',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=200, verbose_name='Название')),
+ ('description', models.TextField(verbose_name='Описание')),
+ ('image', models.ImageField(blank=True, null=True, upload_to='places/', verbose_name='Изображение')),
+ ],
+ ),
+ ]
diff --git "a/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/migrations/__init__.py" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/migrations/__init__.py"
new file mode 100644
index 000000000..e69de29bb
diff --git "a/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/models.py" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/models.py"
new file mode 100644
index 000000000..49d7f3efe
--- /dev/null
+++ "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/models.py"
@@ -0,0 +1,10 @@
+from django.db import models
+
+
+class Place(models.Model):
+ name = models.CharField(max_length=200, verbose_name="Название")
+ description = models.TextField(verbose_name="Описание")
+ image = models.ImageField(upload_to='places/', verbose_name="Изображение", blank=True, null=True)
+
+ def __str__(self):
+ return self.name
diff --git "a/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/static/styles.css" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/static/styles.css"
new file mode 100644
index 000000000..181fc38af
--- /dev/null
+++ "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/static/styles.css"
@@ -0,0 +1,259 @@
+/* Общие стили */
+body {
+ font-family: 'Roboto', sans-serif;
+ margin: 0;
+ padding: 0;
+ background-color: #f4f4f9;
+ color: #333;
+}
+
+header {
+ background-color: #0077b6;
+ color: white;
+ padding: 20px;
+ text-align: center;
+}
+
+
+
+header nav a {
+ color: white;
+ text-decoration: none;
+ margin: 0 15px;
+ font-weight: bold;
+}
+
+header nav a:hover {
+ text-decoration: underline;
+}
+
+main {
+ padding: 20px;
+}
+
+/* Стили для списка достопримечательностей */
+ul {
+ list-style-type: none;
+ padding: 0;
+}
+
+li {
+ background-color: white;
+ margin-bottom: 20px;
+ padding: 15px;
+ border-radius: 8px;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ display: flex;
+ align-items: center;
+ gap: 20px;
+}
+
+li img {
+ border-radius: 8px;
+ max-width: 150px;
+ height: auto;
+}
+
+li h4 {
+ margin: 0;
+ font-size: 1.5em;
+ color: #0077b6;
+}
+
+li p {
+ margin: 10px 0;
+ color: #555;
+}
+
+li a {
+ color: #0077b6;
+ text-decoration: none;
+ font-weight: bold;
+}
+
+li a:hover {
+ text-decoration: underline;
+}
+footer {
+ background-color: #0077b6;
+ color: white;
+ text-align: center;
+ padding: 20px 0;
+ margin-top: 20px;
+}
+
+footer .footer-content {
+ max-width: 800px;
+ margin: 0 auto;
+}
+
+footer nav a {
+ color: white;
+ text-decoration: none;
+ margin: 0 10px;
+}
+
+footer nav a:hover {
+ text-decoration: underline;
+}
+
+footer p {
+ margin: 5px 0;
+}
+
+footer a {
+ color: #ffdd00;
+ text-decoration: none;
+}
+
+footer a:hover {
+ text-decoration: underline;
+}
+
+
+
+
+ul {
+ list-style-type: disc;
+ margin-left: 20px;
+}
+
+ul li {
+ margin-bottom: 5px;
+}
+
+a {
+ color: #0077b6;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+/* Контейнер страницы */
+.contact-container {
+ max-width: 600px;
+ margin: 0 auto;
+ padding: 20px;
+ background-color: #ffffff;
+ border-radius: 8px;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+}
+
+/* Заголовок */
+.contact-title {
+ text-align: center;
+ color: #0077b6;
+ margin-bottom: 10px;
+ font-size: 2em;
+}
+
+/* Описание */
+.contact-description {
+ text-align: center;
+ color: #555;
+ margin-bottom: 20px;
+}
+
+/* Форма */
+.contact-form .form-group {
+ margin-bottom: 15px;
+}
+
+.contact-form label {
+ display: block;
+ margin-bottom: 5px;
+ font-weight: bold;
+ color: #333;
+}
+
+.contact-form input,
+.contact-form textarea {
+ width: 100%;
+ padding: 10px;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ font-size: 1em;
+ box-sizing: border-box;
+}
+
+.contact-form textarea {
+ resize: vertical;
+ height: 100px;
+}
+
+/* Кнопка отправки */
+.button-submit {
+ display: block;
+ width: 100%;
+ padding: 10px;
+ background-color: #0077b6;
+ color: white;
+ border: none;
+ border-radius: 5px;
+ font-size: 1em;
+ cursor: pointer;
+ text-align: center;
+}
+
+.button-submit:hover {
+ background-color: #005f8a;
+}
+
+/* Сообщения об ошибках */
+.error-message {
+ color: red;
+ font-size: 0.9em;
+ margin-top: 5px;
+}
+
+/* Сообщение об успешной отправке */
+.alert-success {
+ background-color: #d4edda;
+ color: #155724;
+ padding: 10px;
+ border-radius: 5px;
+ margin-bottom: 15px;
+ text-align: center;
+}
+
+
+/* Общий стиль для всего сайта */
+
+
+/* Заголовки */
+ h2, h3, h4 {
+ font-weight: 500;
+ color: #0077b6;
+}
+
+/* Навигация */
+nav a {
+ font-weight: 500;
+ text-decoration: none;
+ color: white;
+}
+
+nav a:hover {
+ text-decoration: underline;
+}
+
+/* Кнопки */
+.button-submit {
+ font-weight: 700;
+ font-family: 'Roboto', sans-serif;
+}
+header h1 {
+ font-size: 2.5em;
+ color: white;
+ margin: 0;
+ text-align: center;
+}
+
+/* Стили для плейсхолдеров */
+input::placeholder,
+textarea::placeholder {
+ font-family: 'Roboto', sans-serif; /* Убедитесь, что шрифт совпадает с основным */
+ font-size: 1em;
+ color: #aaa; /* Цвет плейсхолдера */
+}
\ No newline at end of file
diff --git "a/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/templates/about.html" "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/templates/about.html"
new file mode 100644
index 000000000..43d261f0e
--- /dev/null
+++ "b/work/\320\2323320/\320\250\320\265\320\262\321\207\320\265\320\275\320\272\320\276 \320\232\321\200\320\270\321\201\321\202\320\270\320\275\320\260 \320\222\320\260\320\273\320\265\321\200\321\214\320\265\320\262\320\275\320\260/lab_7_8/main/templates/about.html"
@@ -0,0 +1,24 @@
+{% extends 'base.html' %}
+
+{% block title %}О разработке{% endblock %}
+
+{% block content %}
+
О проекте
+
Этот сайт посвящен Байкалу — самому глубокому озеру в мире. Здесь вы найдете информацию о его достопримечательностях, истории и природных особенностях.
+
О разработчике
+
Этот сайт был разработан студенткой Шевченко Кристиной группы К3320 в рамках учебного проекта по веб-разработке. Основная цель проекта — изучение Django и создание интерактивного веб-приложения.