В этой статье мы обсудим редиректы и ошибки с Python Flask. Перенаправление используется в классе Flask для отправки пользователя на определенный URL-адрес с кодом состояния. и наоборот, этот код состояния дополнительно идентифицирует проблему. Когда мы обращаемся к веб-сайту, наш браузер отправляет запрос на сервер, и сервер отвечает так называемым кодом состояния HTTP, который представляет собой трехзначное число. Различные причины ошибок:
- Несанкционированный доступ или плохой запрос.
- Неподдерживаемые типы медиафайлов.
- Перегрузка внутреннего сервера.
- Внутренняя ошибка оборудования/соединения.
Синтаксис перенаправления
flask.redirect(location,code=302)
Параметры:
location(str): местоположение, на которое ведет URL.
code(int): код состояния для перенаправления.
Code: код по умолчанию — 302, что означает, что перемещение является временным.
Возврат: объект ответа и перенаправляет пользователя в другое целевое местоположение с указанным кодом.
Различные типы HTTP-кодов:
Code | Status |
---|---|
300 | Multiple_choices |
301 | Moved_permanently |
302 | Found |
303 | See_other |
304 | Not_modified |
305 | Use_proxy |
306 | Reserved |
307 | Temporary_redirect |
Импортируйте атрибут перенаправления
Мы можем перенаправить URL-адрес с помощью Flask, импортировав redirect. Давайте посмотрим, как импортировать перенаправления из Flask.
Python3
from flask import redirect
Пример:
Давайте рассмотрим простой пример перенаправления URL-адреса с помощью фляги с именем app.py.
Python3
# importing redirect
from
flask
import
Flask, redirect, url_for, render_template, request
# Initialize the flask application
app
=
Flask(__name__)
# It will load the form template which
# is in login.html
@app
.route(
'/'
)
def
index():
return
render_template(
"login.html"
)
@app
.route(
'/success'
)
def
success():
return
"logged in successfully"
# loggnig to the form with method POST or GET
@app
.route(
"/login"
, methods
=
[
"POST"
,
"GET"
])
def
login():
# if the method is POST and Username is admin then
# it will redirects to success url.
if
request.method
=
=
"POST"
and
request.form[
"username"
]
=
=
"admin"
:
return
redirect(url_for(
"success"
))
# if the method is GET or username is not admin,
# then it redirects to index method.
return
redirect(url_for(
'index'
))
if
__name__
=
=
'__main__'
:
app.run(debug
=
True
)
login.html
Создайте папку с именем templates. В шаблонах создает файл templates/ login.html. На этой странице мы получим от пользователя его имя пользователя.
HTML
<!DOCTYPE html>
<
html
lang
=
"en"
>
<
body
>
<
form
method
=
"POST"
,
action
=
"\login"
>
Username: <
input
name
=
username
type
=
text
></
input
><
br
>
<
button
type
=
"submit"
>Login</
button
>
</
form
>
</
body
>
</
html
>
Теперь мы развернем наш код.
python app.py
Выход:
Случай 1: Если имя пользователя — admin, а метод — POST, тогда он будет перенаправлен на URL-адрес успеха и отобразит успешное выполнение входа.
Случай 2: В другом случае, если имя пользователя похоже на xyz или что-то в этом роде, оно будет перенаправлено на метод index, т. е. снова загрузит форму, пока имя пользователя не станет admin.
Flasks Errors
Если в адресе есть ошибка или такого URL нет, то во Flask есть функция abort(), используемая для выхода с кодом ошибки.
Синтаксис метода abort()
Синтаксис: abort(код, сообщение)
- code: int, Параметр кода принимает любое из следующих значений
- message: str, создайте свое собственное сообщение Ошибка.
Различные типы ошибок, которые мы можем прервать в приложении в вашем Flask.
Code | Error |
---|---|
400 | Bad request |
401 | Unauthenticated |
403 | Forbidden |
404 | Not Found |
406 | Not Acceptable |
415 | Unsupported Media Type |
429 | Too Many Requests |
Пример для демонстрации прерывания
В этом примере, если имя пользователя начинается с цифры, то будет передано сообщение с кодом ошибки, иначе в случае успеха будет напечатано «Хорошее имя пользователя».
Пример 1:
Python3
# importing abort
from
flask
import
Flask, abort
# Initialize the flask application
app
=
Flask(__name__)
@app
.route(
'/<uname>'
)
def
index(uname):
if
uname[
0
].isdigit():
abort(
400
)
return
'<h1>Good Username</h1>'
if
__name__
=
=
'__main__'
:
app.run()
Выход:
Случай 1: если имя пользователя не начинается с цифры.
Случай 2: если имя пользователя начинается с цифры.
Пример 2:
В приведенном выше коде Python код состояния для abort() равен 400, поэтому возникает ошибка неверного запроса. Попробуем изменить код на 403. Если имя пользователя начинается с цифры, возникает ошибка Forbidden Error.
Python3
# importing abort
from
flask
import
Flask, abort
# Initialize the flask application
app
=
Flask(__name__)
@app
.route(
'/<uname>'
)
def
index(uname):
if
uname[
0
].isdigit():
abort(
403
)
return
'<h1>Good Username</h1>'
if
__name__
=
=
'__main__'
:
app.run()
Выход: