Маршруты и ответы
Flask — небольшой веб-фреймворк: сайт на нём умещается в один файл, и весь код можно понять целиком. На Flask делают сайты, API для мобильных приложений и панели управления.
В курсе вы соберёте сайт-визитку: страницы, шаблоны, форму обратной связи, JSON-API и вход для владельца.
Минимальный сайт
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Привет! Это мой сайт."
if __name__ == "__main__":
app.run(debug=True)
Запустите файл и откройте в браузере http://127.0.0.1:5000/. debug=True перезапускает сервер при каждом сохранении файла и показывает подробные ошибки (только для разработки!). Остановить сервер — Ctrl+C или кнопка «Стоп».
app = Flask(__name__)— само приложение.@app.route("/")связывает адрес с функцией. Такая функция называется представлением (view).- Что представление вернёт — то браузер и получит.
Переменные в адресе
@app.route("/user/<name>")
def user(name):
return f"Страница {name}"
@app.route("/post/<int:pid>")
def post(pid): # pid — уже число
return f"Пост №{pid}"
Части адреса в угловых скобках становятся аргументами функции. Конвертеры: без конвертера — строка без /, int — неотрицательное целое, float, path — строка вместе с /. Если адрес не подходит (/post/abc), Flask сам отвечает 404.
Коды ответа
Каждый ответ сервера несёт код: 200 — всё хорошо, 302 — перенаправление, 400 — неверный запрос, 404 — не найдено, 405 — метод не разрешён, 500 — ошибка в коде сервера.
from flask import abort
@app.route("/age/<int:age>")
def age(age):
if age > 150:
return "Так долго не живут", 400 # текст и код
if age == 0:
abort(404) # прервать и отдать страницу 404
return f"Вам {age}"
Если в представлении случится исключение (например, деление на ноль), посетитель увидит 500. Хорошее приложение проверяет входные данные и отвечает понятной ошибкой 400.
Представление должно вернуть строку (или HTML, JSON, кортеж «текст, код»). Число вернуть нельзя — превратите его в строку: return str(total).
Тест-клиент
Чтобы проверить сайт, не нужен браузер:
client = app.test_client()
r = client.get("/age/200")
print(r.status_code) # 400
print(r.get_data(as_text=True)) # Так долго не живут
Так проверяются все задачи курса. Программа запускает сервер только под if __name__ == "__main__": — при проверке он не стартует, а «Запустить у себя» поднимает настоящий сервер, и сайт можно открыть в браузере.
Итог
Flask(__name__),@app.route,app.run(debug=True);- переменные в адресе и конвертеры
int,float,path; - кортеж
(текст, код)иabort(код); 200, 400, 404, 500; app.test_client()— проверка без браузера.