English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Приложения с графическим интерфейсом требуют предоставлять пользователям интерактивные сообщения о phảnождении. Например, десктопные приложения используют диалоговые окна или сообщения, а JavaScript использует функцию alert() для аналогичных целей.
В Web-приложении Flask легко генерировать такие сообщения. Система всплывающих сообщений в рамке Flask позволяет создавать сообщение в одном представлении и отображать его в функции представления с именем next.
Модуль Flask содержит метод flash(). Он передает сообщение к следующему запросу, который обычно является шаблоном.
# Имя файла: example.py # Авторское право: 2020 By w3codebox # Автор по: ru.oldtoolbag.com # Дата: 2020-08-08 flash(message, category)
Здесь -
message - Параметр это само сообщение, которое нужно обновить. category - Параметр является необязательным. Он может быть 'ошибка', 'информация' или 'предупреждение'.
Чтобы удалить сообщение из сессии, шаблон вызывает функцию get_flashed_messages().
# Имя файла: example.py # Авторское право: 2020 By w3codebox # Автор по: ru.oldtoolbag.com # Дата: 2020-08-08 get_flashed_messages(with_categories, category_filter)
Два параметра являются необязательными. Если полученное сообщение имеет категорию, первый параметр является кортежем. Второй параметр полезен для отображения конкретного сообщения.
Ниже приведен шаблон для полученных сообщений.
# Имя файла: example.py # Авторское право: 2020 By w3codebox # Автор по: ru.oldtoolbag.com # Дата: 2020-08-08 {% with messages = get_flashed_messages() %} {% if messages %} {% for message in messages %} {{ message }} {% endfor %} {% endif %} {% endwith %}
Теперь давайте посмотрим на простой пример, демонстрирующий механизм всплывающих сообщений в Flask. В следующем коде URL => "/" отображает ссылку на страницу входа, не указывая отправляемое сообщение.
# Имя файла: example.py # Авторское право: 2020 By w3codebox # Автор по: ru.oldtoolbag.com # Дата: 2020-08-08 @app.route('/') def index(): return render_template('index.html')
Эта ссылка направляет пользователя к URL для отображения формы входа => "/login". При подаче заявки функция login() проверяет имя пользователя и пароль, и соответствующим образом всплывает сообщение "Успешно" или "Ошибка".
# Имя файла: example.py # Авторское право: 2020 By w3codebox # Автор по: ru.oldtoolbag.com # Дата: 2020-08-08 @app.route('/login', methods=['GET', 'POST']) def login(): error = None if request.method == 'POST': if request.form['username'] != 'admin' or \ request.form['password'] != 'admin': error = 'Invalid username or password. Please try again!' else: flash('You were successfully logged in') return redirect(url_for('index')) return render_template('login.html', error=error)
Если есть ошибка, шаблон входа будет повторно отображаться с сообщением об ошибке.
Файл шаблона: login.html Код таков -
# Имя файла: example.py # Авторское право: 2020 By w3codebox # Автор по: ru.oldtoolbag.com # Дата: 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Пример Flask</title> </head> <body> <h1>Вход</h1> {% if error %} <p><strong>Ошибка:</strong> {{ error }} {% endif %} <form action="/login" method="POST"> <dl> <dt>Имя пользователя:</dt> <dd> <input type=text name="username" value="{{request.form.username}}"> </dd> <dt>Пароль:</dt> <dd><input type="password" name="password"></dd> </dl> <p><input type=submit value="Вход"></p> </form> </body> </html>
Если вход успешен, на шаблоне индекса будет показано успешное сообщение. Следующий код сохранен в файле ( index.html) -
# Имя файла: example.py # Авторское право: 2020 By w3codebox # Автор по: ru.oldtoolbag.com # Дата: 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Flask Message Flashing</title> </head> <body> {% with messages = get_flashed_messages() %} {% if messages %} <ul class=flashes> {% for message in messages %} <li>{{ message }}</li> {% endfor %} </ul> {% endif %} {% endwith %} <h1>Пример Flask Message Flashing</h1> <p>Вы хотите <a href="{{ url_for('login') }}"> <b>Вход?</b></a></p> </body> </html>
Полный код примера Flask Message Flashing показан ниже -
# Имя файла: example.py # Авторское право: 2020 By w3codebox # Автор по: ru.oldtoolbag.com # Дата: 2020-08-08 from flask import Flask, flash, redirect, render_template, request, url_for app = Flask(__name__) app.secret_key = 'random string' @app.route('/') def index(): return render_template('index.html') @app.route('/login', methods=['GET', 'POST']) def login(): error = None print(request.method) if request.method == 'POST': if request.form['username'] != 'admin' or \ request.form['password'] != 'admin': error = 'Invalid username or password. Please try again!' else: #flash('Вы успешно вошли в систему') flash('You were successfully logged in') return redirect(url_for('index')) return render_template('login.html', error=error) if __name__ == "__main__": app.run(debug=True)
После выполнения вышеуказанного кода вы увидите экран, как показано ниже.
При нажатии на ссылку будет переход на страницу входа. Введите имя пользователя и пароль -
Нажмите ВходКнопка. Будет отображено сообщение «Вы успешно вошли в систему».