Пользовательские сообщения во время входа и выхода из системы в Flask

Когда пользователь входит в веб-приложение, сообщение на личном дисплее может задать тон для теплого приветствия. В Flask отображение приветственного сообщения пользователю может быть достигнуто разными способами. Я показываю приветственные сообщения пользователю двумя способами: через переменную сеанса или через флэш-функцию, импортированную из Flask.

Недавно я создавал веб-приложение Flask, в котором используются эти два метода. В моем веб-приложении у меня есть регистрационная форма, где пользователи могут зарегистрироваться. После регистрации пользователи будут хранить свои данные в базе данных. Затем пользователь может войти в систему для доступа к дополнительным/привилегированным пользовательским службам. Мы можем использовать информацию, предоставленную на этапе регистрации, для установки личного сообщения при входе в систему.

Способ 1. Переменная сеанса

Во время входа в систему я сначала проверяю, правильно ли заполнена форма входа. Если указанный адрес электронной почты возвращает None, пользователь перенаправляется на страницу регистрации с помощью функций redirect и url_for (см. основную логику, рис. 2).

Затем я выполняю небольшую проверку, чтобы убедиться, что пароль, предоставленный пользователем для своей учетной записи, соответствует хешированному паролю, хранящемуся в моей базе данных. Если есть совпадение, я использую функцию login_user, импортированную из flask_login, для входа пользователя.

Затем я использую переменную сеанса из фляги. Использование переменной сеанса включает два процесса. Сначала я получаю доступ к имени, указанному пользователем во время входа в систему, используя синтаксис: form.username.data. Здесь атрибут имени пользователя получен из моей таблицы входа в систему (часто называемой моделью во Flask), а атрибут данных получает доступ к имени. Я присвоил это имя переменной active_user.

Затем я использую переменную сеанса так же, как обычный словарь Python. Я устанавливаю ключ в строку «имя пользователя» и присваиваю значение переменной active_user. Затем я использую функции перенаправления и url_for для перенаправления на целевую страницу.

(В моем app.py у меня есть функция просмотра, помеченная как «целевая страница». Вот почему я могу написать здесь целевую страницу в виде строки).

Вторая часть использования переменной сеанса включает доступ к значению сеанса и его сохранение в переменной.

Когда переменная сеанса используется во время входа в систему, мы перенаправляем на главную страницу веб-приложения, целевую страницу. Однако, когда пользователь впервые заходит на мой веб-сайт, он также попадает на целевую_страницу, и поэтому объект сеанса не существует.

Чтобы справиться с этой распространенной проблемой, просто оберните свой код в блок try-except, в результате чего, если объект сеанса не существует и может возникнуть ключевая ошибка, это можно перехватить, позволяя программе продолжить работу, отобразив целевую страницу без какого-либо личного приветственного сообщения. .

В html-коде мы можем использовать шаблоны jinja с условной логикой для отображения приветственного сообщения пользователю, если он вошел в систему. Если пользователь вошел в систему, мы можем получить доступ к значению сеанса и передать его как переменную на лендинг. страница. Затем мы используем синтаксис jinja, здесь двойные фигурные скобки для отображения переменной active_user.

Как показано ниже, после входа в систему отображается хорошо отформатированное приветственное сообщение.

Способ 2. Функция вспышки

Мы также можем использовать метод flash для отображения пользователю полезного подтверждающего сообщения о выходе из системы. Во-первых, мы используем декоратор @login_required, импортированный из flask login. Это означает, что мы должны войти в систему, чтобы выйти из системы.

Мы выходим из системы и записываем два аргумента в функцию flash. Первое — это сообщение для отображения, а второе — категория. Это в значительной степени необязательно, но хорошая привычка. Затем мы можем переустановить значение объекта сеанса на None перед повторным перенаправлением на целевую страницу.

В HTML-коде целевой страницы выше, в первом блоке jinja if else, если флэш-сообщение снабжено категорией успеха, оно сохраняется как элемент списка. Можно обеспечить функцию многократной вспышки с сообщениями. В данном примере используется только один.

Затем можно выполнить итерацию по этому списку, используя синтаксис if и for jinja, показанный ниже, чтобы отобразить сообщение.

Теперь появляется красивое сообщение о выходе из системы.

Приятным штрихом, который вы, возможно, захотите добавить, является изменение размера окна предупреждения о выходе из системы для разных устройств. Здесь для больших экранов я использую 4 столбца для предупреждающего сообщения, а для мобильного устройства лучше использовать все 12, как показано на изображении ниже.

Спасибо за внимание, надеюсь, этот пример демонстрирует хороший пример использования как сеанса, так и флэш-памяти в Python при создании веб-приложений с помощью Flask.