English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Перенаправление и ошибки Flask

Класс 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)