English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Класс Flask имеет функцию перенаправления redirect(). При вызове она возвращает объект ответа и перенаправляет пользователя на другую цель с указанным кодом состояния.
Прототип функции redirect() -
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: ru.oldtoolbag.com # Date: 2020-08-08 Flask.redirect(location, statuscode, response)
В aforementioned функции -
location Параметр указывает URL, на который ответ должен быть перенаправлен. statuscode Параметр отправляет заголовки браузеру, по умолчанию 302. response Параметр используется для создания экземпляра ответа.
Следующие коды состояния стандартизированы -
HTTP_300_MULTIPLE_CHOICES HTTP_301_MOVED_PERMANENTLY HTTP_302_FOUND HTTP_303_SEE_OTHER HTTP_304_NOT_MODIFIED HTTP_305_USE_PROXY HTTP_306_RESERVED HTTP_307_TEMPORARY_REDIRECT
Стандартный код состояния - 302, это означает 'найдено' страницу.
В следующем примере функция redirect() используется для повторного отображения страницы входа при неудачной попытке входа.
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: ru.oldtoolbag.com # Date: 2020-08-08 from flask import Flask, redirect, url_for, render_template, request # Инициализация приложения Flask app = Flask(__name__) @app.route('/') def index(): return render_template('log_in.html') @app.route('/login', methods=['POST', 'GET']) def login(): if request.method == 'POST' и request.form['username'] == 'admin': return redirect(url_for('success')) return redirect(url_for('index')) @app.route('/success') def success(): return 'logged in successfully' if __name__ == '__main__': app.run(debug=True)
Класс Flask имеет функцию abort() с кодом ошибки.
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: ru.oldtoolbag.com # Date: 2020-08-08 Flask.abort(code)
Параметр code использует одно из следующих значений -
400 - для неправильного запроса 401 - для неавторизованного доступа 403 - запрещено 404 - не найдено 406 - не принимается 415 - используется不支持的多媒体 тип 429 - слишком много запросов
Здесь производятся некоторые мелкие изменения в функции login() из предыдущего кода. Если нужно показать страницу 'Unauthourized', а не повторно показать страницу входа, замените её на вызов остановки (401).
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: ru.oldtoolbag.com # Date: 2020-08-08 from flask import Flask, redirect, url_for, render_template, request, abort app = Flask(__name__) @app.route('/') def index(): return render_template('log_in.html') @app.route('/login', methods=['POST', 'GET']) def login(): if request.method == 'POST': if request.form['username'] == 'admin': return redirect(url_for('success')) else: abort(401) else: return redirect(url_for('index')) @app.route('/success') def success(): return 'logged in successfully' if __name__ == '__main__': app.run(debug=True)