Пользовательские страницы ошибок
Flask поставляется с удобной функцией abort(), которая прерывает запрос с кодом HTTP-ошибки. Она также предоставит простую черно-белую страницу ошибки с базовым описанием, но ничего особенного.
В зависимости от кода ошибки пользователь с большей или меньшей вероятностью увидит такую ошибку.
Общие коды ошибок
Следующие коды ошибок часто отображаются пользователю, даже если приложение работает корректно:
- 404 Not Found
-
Знакомое сообщение «Вы ошиблись при вводе адреса». Такая распространённая ошибка, что даже новички в интернете знают, что 404 означает: черт возьми, того, что я искал, нет. Очень полезно убедиться, что на странице 404 есть что-то полезное, по крайней мере, ссылка на главную страницу.
- 403 Forbidden
-
Если у вас есть какой-либо контроль доступа на вашем веб-сайте, вы должны отправлять код 403 для запрещённых ресурсов. Поэтому убедитесь, что пользователь не запутался, когда пытается получить доступ к запрещённому ресурсу.
- 410 Gone
-
Знаете ли вы, что у «404 Not Found» есть брат под названием «410 Gone»? Мало кто на самом деле его реализует, но идея в том, что ресурсы, которые ранее существовали и были удалены, отвечают кодом 410, а не 404. Если вы не удаляете документы постоянно из базы данных, а только отмечаете их как удалённые, сделайте пользователю одолжение и используйте код 410 вместо него, и отобразите сообщение о том, что то, что они искали, было удалено навсегда.
- 500 Internal Server Error
-
Обычно происходит из-за ошибок программирования или перегрузки сервера. Очень хорошая идея — иметь там красивую страницу, потому что ваше приложение будет время от времени ломаться (см. также: Ошибки приложения).
Обработчики ошибок
Обработчик ошибок — это функция, как и функция представления, но она вызывается, когда происходит ошибка, и ей передаётся эта ошибка. Скорее всего, ошибка — это HTTPException, но в одном случае это может быть другая ошибка: обработчик ошибок внутренней серверной ошибки также получит другие экземпляры исключений, если они не были перехвачены.
Обработчик ошибок регистрируется с помощью декоратора errorhandler() и кодом ошибки исключения. Помните, что Flask не установит для вас код ошибки, поэтому убедитесь, что вы также передаёте код HTTP-статуса при возвращении ответа.
Обратите внимание, что если вы добавите обработчик ошибок «500 Internal Server Error», Flask не вызовет его, если он работает в режиме отладки.
Вот пример реализации для исключения «404 Page Not Found»:
from flask import render_template
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
Пример шаблона может быть таким:
{% extends "layout.html" %}
{% block title %}Page Not Found{% endblock %}
{% block body %}
<h1>Page Not Found</h1>
<p>What you were looking for is just not there.
<p><a href="{{ url_for('index') }}">go somewhere nice</a>
{% endblock %}
© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/0.12.x/patterns/errorpages/