{% extends 'base.html' %} {% block content %}

Задание к лабораторной работе №4

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

Учётная запись пользователя характеризуется идентификатором, логином, значением хэш-функции пароля, фамилией, именем, отчеством, идентификатором роли пользователя и датой создания записи. Дата создания должна устанавливаться автоматически. У пользователя может отсутствовать фамилия или роль. Роль характеризуется идентификатором, названием и описанием.

В приложении должна быть реализована функциональность аутентификации (можно взять из лаб. №3). Загрузка данных пользователя при аутентификации должна осуществляться из базы данных.

Главная страница приложения должна отображать список пользователей в виде таблицы. Столбцы таблицы: порядковый номер пользователя, полное имя, название роли, действия. В столбце «действия» в каждой строке должны быть кнопки «Просмотр», «Редактировать» и «Удалить». Кнопки «Редактировать» и «Удалить» должны отображаться только для аутентифицированных пользователей. Под таблицей должна быть кнопка «Создать пользователя», которая также должна отображаться только для аутентифицированных пользователей.

Просмотр записи

При нажатии на кнопку «Просмотр» должна открываться страница с данными выбранного пользователя (идентификатор, логин, фамилия, имя, отчество, название роли). Данные должны отображаться в виде таблицы. Эта страница доступна всем пользователям.

Создание записи

При нажатии на кнопку «Создать пользователя» должна открываться страница с формой для ввода данных нового пользователя. Если неаутентифицированный пользователь попытается зайти на эту страницу, он должен быть перенаправлен на страницу входа.

Форма должна содержать поля для ввода логина, пароля, фамилии, имени, отчества и выбора роли (selector). Внизу формы должна быть кнопка «Сохранить», при нажатии на которую на сервер отправляется POST-запрос и данные записываются в базу данных. При возникновении ошибки в процессе обработки запроса пользователю должно быть показано сообщение об ошибке (flash-сообщение) и отображена страница с заполненной формой (чтобы пользователь мог исправить введённые данные). При успешном завершении операции пользователь должен быть перенаправлен на страницу со списком пользователей и показано сообщение об успешном завершении.

Редактирование записи

При нажатии на кнопку «Редактировать» должна открываться страница с формой редактирования пользователя. Она должна быть автоматически заполнена данными редактируемого пользователя. Набор полей данной формы должен соответствовать форме создания пользователей за исключением полей «логин» и «пароль» — их не должно быть в форме редактирования. Также не должно быть дублирования шаблона формы, то есть форма должна быть реализована в виде макроса и использоваться как на странице создания, так и на странице редактирования пользователя. Доступ к функциональности редактирования имеют только аутентифицированные пользователи. Механизм обработки ошибок и вывода сообщений аналогичен функциональности создания.

Удаление записи

При нажатии на кнопку «Удалить» должно открываться модальное окно с сообщением «Вы уверены, что хотите удалить пользователя {}?». Вместо {} должно быть подставлено полное имя удаляемого пользователя. В нижней части модального окна должны быть кнопки «Да» и «Нет». При нажатии кнопки «Да» на сервер отправляется POST-запрос, и в результате обработки выбранная учётная запись пользователя удаляется из базы данных. При возникновении ошибки в процессе обработки запроса пользователю должно быть показано сообщение. Доступ к функциональности удаления имеют только аутентифицированные пользователи. Механизм обработки ошибок и вывода сообщений аналогичен функциональности создания и редактирования.

Проверка данных, вводимых пользователем

Помимо перехвата ошибок записи в базу данных, реализуйте предварительную проверку введённых пользователем данных на стороне сервера. Поля логин, пароль, фамилия и имя не могут быть пустыми. Логин должен состоять только из латинских букв и цифр и иметь длину не менее 5 символов. Пароль должен соответствовать следующим требованиям:

Если какое-либо из вышеперечисленных требований нарушено, необходимо выделить некорректно заполненные поля в форме (с помощью соответствующего класса) и отобразить текст ниже каждого такого поля с объяснением причины ошибки (например, «Поле не может быть пустым»).

Смена пароля

Добавьте возможность смены пароля текущего пользователя. Разместите ссылку «Сменить пароль» в панели навигации. При переходе по этой ссылке пользователь должен попасть на страницу с формой, содержащей 3 поля: старый пароль, новый пароль, повтор нового пароля. При отправке данных формы на сервер необходимо проверить правильность введённого старого пароля, соответствие требованиям к новому паролю (см. предыдущий раздел) и совпадение полей «новый пароль» и «повтор нового пароля». При возникновении ошибок пользователю должно быть показано flash-сообщение и/или выделены соответствующие поля формы. В случае успешной смены пароля перенаправьте пользователя на главную страницу и покажите ему flash-сообщение об успешном завершении.

{% endblock %}