В этом уроке мы узнаем как передавать флэш-сообщения с помощью метода Flask flash().
Что означает передать флэш-сообщение?
Для GUI-приложений всегда полезно давать обратную связь пользователю на его действия.
То есть, например, в форме Flask, если пользователь оставляет поле пустым, то вполне уместно выдать ему сообщение об ошибке/информацию о том, что поле является обязательным для заполнения.
В графическом интерфейсе Python Tkinter для отображения сообщения используется месседж или диалоговое окно, а в Client-Side Scripting Language JavaScript (Клиентский язык сценариев JavaScript) это делается с помощью функции alert.
Также, во Flask у нас есть метод flash, позволяющий сделать именно это.
Как работает метод Flask flash?
Метод Flask flash показывает сообщения пользователям.
С помощью Flash мы можем создать флэш-сообщение в одном представлении Flask, а затем показать его в другом, называемом "next (следующий)", которое обычно является шаблоном (template).
Типичным примером шаблонного представления является:
@app.route('/template')
def blog():
#codes...
#codes...
return render_template('template.html')
Таким образом, представление Flask создает флэш-сообщение в одном представлении и затем передает его в следующее (вместе с запросом), которое отображает сообщение пользователю.
Синтаксис для Flash:
flash(message,category)
Здесь,
message : Сообщение для отображения
category : (Категория). Необязательный параметр, который может быть установлен в "error" (ошибка), "info" (информация) или "warning" (предупреждение).
Чтобы извлечь флэш-сообщение из сессии, где оно хранится, и отобразить его на шаблоне, мы используем функцию get_flashed_messages().
get_flashed_messages(with_categories, category_filter)
Здесь,
with_categories : Необязательный кортеж параметров для упоминания категории (ошибка/информация/предупреждение)
category_filter : Необязательный параметр для фильтрации и отображения только определенных сообщений.
Простой пример, показывающий get_flashed_message() в файле Template:
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
{{ message }}
{% endfor %}
{% endif %}
{% endwith %}
Использование метода flash() во Flask на практике
Здесь мы создадим простое Flask-приложение, которое будет выдавать флэш-сообщение - login successful (успешный вход), если пользователь ввел правильный пароль.
1) Кодирование файла приложения Flask
Здесь мы покажем простую форму, в которой вводится пароль. Если пароль правильный, то выводится флэш-сообщение.
from flask import Flask,render_template,request,redirect,flash
app = Flask(__name__)
@app.route('/form')
def form():
return render_template('form.html')
@app.route('/login', methods = ['POST', 'GET'])
def login():
if request.method == 'GET':
return "Login via the login Form"
if request.method == 'POST':
password = request.form['password']
if password == '123':
#The following flash message will be displayed on successful login
flash('Login successful')
return render_template('success.html')
else:
return redirect('/form')
Здесь success.html является "следующим" шаблоном, так как сообщение будет появляться там.
Вот и все!!! давайте теперь закодируем шаблоны.
2) Кодирование шаблонов
form.html будет иметь вид:
<form action="/login" method = "POST">
<p>password <input type = "text" name = "password" /></p>
<p><input type = "submit" value = "Submit" /></p>
</form>
А также файл шаблона Success.html:
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
{{ message }}
{% endfor %}
{% endif %}
{% endwith %}
<h2>User Authenticated</h2>
Обратите внимание, как мы использовали здесь функцию get_flashed_messages().
3) Реализация
Вот и все!!! Давайте теперь запустим сервер и проверим нашу веб-страницу
Нажмите "/form":
Форма
Введите 1234 и нажмите кнопку отправить
Вход в систему
И вот оно, наше флэш-сообщение прямо на экране.
Заключение
Вот и все по этому уроку, ребята! Надеюсь, вы получили достаточно знаний, чтобы использовать метод Flash в своих веб-приложениях. Ознакомьтесь с нашей статьей Flask Forms, чтобы узнать больше о формах.
Увидимся в следующей статье! Счастливого кодинга!!!
Методы класса (classmethod): нужны ли они? Приглашаем всех на бесплатный урок, где поговорим об особенностях ООП в python: о наследовании и миксинах. Рассмотрим ситуации, когда без classmethod не обойтись. Посмотрим на реализации в известных библиотеках.
sdgsdgsdgwerwer
Довольно доступная статья!