Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа / Курсовая ТИМП.pdf
Скачиваний:
0
Добавлен:
08.08.2026
Размер:
6 Мб
Скачать

тративные контроллеры не используют SignInManager, так как не изменяют сессию текущего пользователя.

Взаимодействие с базой данных строится на DbContext (класс

AppDbContext), в котором определены наборы сущностей Movies, AudioTracks, Subtitles и Subscriptions, а также настроены связи между таблицами с каскадным удалением дочерних записей. Все модели данных снабжены атрибутами валидации (Required, MaxLength, Range), что обеспечивает проверку входных данных до их сохранения.

Для защиты от несанкционированного доступа применяются стандартные механизмы ASP.NET Core: сессии для хранения временных данных (подтверждение возраста), cookie-аутентификация, проверка подлинности запросов. В методе Program.cs настроены политики паролей,

пути для входа и страница отказа в доступе.

4.4 Клиентская часть

Клиентская часть онлайн-кинотеатра представляет собой веб-

интерфейс, который формируется на сервере с использованием технологии

Razor (представления ASP.NET Core MVC) и отдается в браузер. Для корректной маршрутизации при развёртывании используется обратный прокси-сервер Nginx, который также выступает входной точкой для всех клиентских запросов.

Все HTML-страницы создаются с помощью Razor-представлений

(файлы .cshtml), которые позволяют внедрять серверный код и данные моделей. Макет _Layout.cshtml определяет общую структуру сайта: заголовок с навигационной панелью, основное содержимое (@RenderBody()), footer.

Подключение стилей и скриптов осуществляется через теги <link> и <script>.

Для стилизации используется стандартная CSS-библиотека Bootstrap (или пользовательский site.css), обеспечивающая адаптивную вёрстку.

36

Главная страница отображает список фильмов в виде карточек. Каждая карточка содержит название, год и возрастной рейтинг (рисунок 4.6). В

верхней части страницы расположена строка поиска. Результат поиска фильтруется на сервере и динамически обновляет список.

Рисунок 4.6 – Главная страница

Страница регистрации – форма с полями: Email, пароль, подтверждение пароля (рисунок 4.7). На клиентской стороне выполняется валидация. При отправке данные передаются методом POST на сервер; в случае ошибки валидации сообщения отображаются под соответствующими полями. На рисунке 4.8 представлена страница с сообщением об успешной регистрации.

Рисунок 4.7 – Страница регистрации

37

Рисунок 4.8 – Сообщение об успешной регистрации

Страница входа – форма с полями Email, пароль и чекбоксом «Запомнить меня» (рисунок 4.9). После успешной аутентификации пользователь перенаправляется на Главную (рисунок 4.10). При неверных учетных данных выводится общее сообщение об ошибке.

Рисунок 4.9 – Страница входа

Рисунок 4.10 – Сообщение об успешной аутентификации

Страница фильма – содержит подробную информацию о фильме:

описание, год, продолжительность, возрастной рейтинг (рисунок 4.11). Если возрастное ограничение 18+, появляется кнопка «Подтвердить возраст», при нажатии которой отправляется POST-запрос на ConfirmAge и сохраняется

38

отметка в сессии. Далее открывается страница просмотра. Также на этой странице отображаются доступные аудиодорожки и субтитры в виде выпадающих списков (значения подгружаются вместе с моделью фильма).

Рисунок 4.11 – Страница фильма

Страница просмотра содержит HTML5-видеоплеер. Атрибуту src

присваивается путь к файлу фильма. С помощью JavaScript динамически подставляются дорожки субтитров и переключаются аудиодорожки (свойство audioTracks). Для управления плеером используется стандартный API

браузера.

Страница покупки подписки – форма, запрашивающая план (месяц /

год), данные банковской карты (номер, владелец, срок, CVV) (рисунок 4.12).

Валидация осуществляется как на стороне клиента, так и на сервере. После отправки форма обрабатывается контроллером; при успешном оформлении пользователь получает сообщение и перенаправляется в профиль.

Рисунок 4.12 – Страница покупки подписки

39

Личный профиль – отображает текущий email, статус подписки и дату окончания. Доступны поля для изменения email и пароля (с вводом текущего пароля), а также кнопка удаления аккаунта (с подтверждением через диалоговое окно). Изменения отправляются через POST-формы. На рисунке

4.13 представлена страница личного профиля.

Рисунок 4.13 – Личный профиль

Административная панель включает несколько страниц:

1.Фильм – таблица фильмов с кнопками «Редактировать» и «Удалить»,

атакже ссылка на добавление. Редактирование осуществляется через отдельную форму.

2.Озвучки и Субтитры – аналогичные страницы для управления дорожками и субтитрами с фильтрацией по фильму.

3.Пользователи – список пользователей с возможностью редактировать роль и статус подписки.

Административные страницы доступны только пользователям с ролью

«Admin»; при попытке прямого перехода неавторизованный пользователь получает страницу AccessDenied.

Все переходы между страницами выполняются синхронно (полная перезагрузка), за исключением поиска на главной – он также реализован через

40

GET-запрос с обновлением страницы. Данные форм отправляются методом

POST с защитным токеном __RequestVerificationToken, который генерируется автоматически через @Html.AntiForgeryToken().

41

Соседние файлы в папке Курсовая работа